在下面的示例中,我以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
?
答案 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