Linux 在awk中提取列的列?

Linux 在awk中提取列的列?,linux,bash,awk,Linux,Bash,Awk,在下面的示例中,我以3000 x 3000的输出结束,其中再次运行awk以获得宽度和高度作为变量,而不使用空格 $ cat << EOF >> /tmp/test File name : Graf3.png File size : 84937 Bytes MIME type : image/png Image size : 3000 x 3000 EOF $ cat /tmp/test | awk -F':' '/Image

在下面的示例中,我以3000 x 3000的输出结束,其中再次运行awk以获得宽度和高度作为变量,而不使用空格

$ cat << EOF >> /tmp/test
File name       : Graf3.png
File size       : 84937 Bytes
MIME type       : image/png
Image size      : 3000 x 3000
EOF
$ cat /tmp/test | awk -F':' '/Image size/ {print $2}'
 3000 x 3000
问题:

有没有办法在不再次调用awk的情况下获得宽度和高度?

告诉awk使用:和x作为字段分隔符,从而在一行中获得3000x3000

awk 'BEGIN{ FS=": | x "} { if($0 ~ /Image size/) { print $2 "x" $3 }}' test.txt
结果:

3000x3000

不清楚,但如果我读的是正确的,以防您需要两个名为height和width的变量,那么通过简单地创建两个变量并打印其字段号来保持简单

对于高度变量:

height=$(awk '{print $3}' Input_file)
width=$(awk '{print $5}'  Input_file)
对于宽度变量:

height=$(awk '{print $3}' Input_file)
width=$(awk '{print $5}'  Input_file)
获得所需的$2字段后,可以使用拆分:

$ awk -F':' '/Image size/{split($2,a,/[[:space:]]*x[[:space:]]*/); print a[1],a[2]}' test
3000 3000

假设您想要shell中的值而不是awk变量:

$ dim=( $( awk '/Image size/{print $(NF-2), $NF}' file ) )
$ declare -p dim
declare -a dim=([0]="3000" [1]="3000")

bash:从进程替换的输出读取:

read -r width x height < <(awk -F':' '/Image size/ {print $2}' file)
echo "width=$width"
echo "height=$height"

请务必说明最终输出应该是什么样子的?如果您想要shell变量中的值,您可以使用IFS='x'read之类的方法。如果您有一个包含内容的文件,您希望在不使用awk的情况下提取某些内容?你还指望什么?grep还是普通shell?问题不清楚祝贺你的10万美元,感谢你在过去几年里分享你的知识和见解。哦,七月四日快乐!谢谢你的帮助和解释!你向我展示了我所知道的关于awk的大部分事情。@Ed Morton,为你的10万美元回购计划致以万分祝贺,先生,这是当之无愧的,干杯,愿上帝保佑你,给你力量做更多的事情。感谢所有人的良好祝愿,也祝你一切顺利@埃德蒙顿:复制赫克2mgl的话,我所知道的关于awk的一切,我都是从你那里学到的!先生,我向您致以最崇高的敬意!