在awk中提取列的列?

时间:2018-07-04 14:42:14

标签: 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 size/ {print $2}'
 3000 x 3000

问题

有没有一种方法可以获取宽度和高度而无需再次调用awk

5 个答案:

答案 0 :(得分:6)

假设您要在shell中使用值而不是awk变量:

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:1)

通过告诉awk使用3000x3000": "作为字段分隔符,在一行中获得" x "

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

结果:

3000x3000

答案 3 :(得分:1)

不清楚,但是如果需要两个名为height和width的变量,如果我没看错的话,只需简单地创建2个变量并简单地打印其字段编号即可使其简单易行。

对于高度变量:

height=$(awk '{print $3}' Input_file)

对于宽度变量:

width=$(awk '{print $5}'  Input_file)

答案 4 :(得分:1)

拥有所需的split字段后,您可以使用$2

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