如何在shell中使用awk变量

时间:2012-11-30 09:02:04

标签: shell unix awk

我有以下结构(只有一行)

col1  col2  col3  col4
----------------------
12    34    14    10

我要做的是我必须获取col2和col4并在shell中使用该值。

a=$(awk 'NR<2{$2}')
b=$(awk'NR<2{$4}')

我必须在shell脚本中使用a和b。 但这不是一个好主意,因为我使用awk两次而不是像这样获取价值。

awk'NR<2{ a=$2;b=$4}'

但我不知道如何在我的shell中使用这个a和b。

3 个答案:

答案 0 :(得分:4)

使用eval可以在一个awk命令中分配更多的shell变量。见下面的测试:

kent$  echo $a,$b
,

kent$  cat test
col1  col2  col3  col4
----------------------
12    34    14    10

kent$  eval $(awk 'NR==3{print "a="$2;print "b="$4}' test)

kent$  echo $a,$b
34,10

请注意,我刚刚复制了您的输入示例,包含标题/标题等。因此在我的脚本中,数据行为NR = 3。如果不是你的情况,你可以调整它。

答案 1 :(得分:1)

read内置功能非常有用。

read _ a _ b _ < <( tail -n +3 data.txt)  # Assign the columns you don't care about to _
echo $a,$b

这样可以避免使用eval,如果您能找到其他选项,通常应避免使用{。}}。

答案 2 :(得分:0)

$ v=( $(awk 'NR==3{print $2 ORS $4}' file) )
$ a="${v[0]}"
$ b="${v[1]}"
$ echo "$a,$b"
34,10