2

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

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。

4

3 回答 3

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。如果不是你的情况,你可以调整它。

于 2012-11-30T09:31:55.540 回答
1

read内置在这里很有用。

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

这避免了使用eval,如果您可以找到其他选项,通常应该避免使用。

于 2012-11-30T13:42:38.000 回答
0
$ v=( $(awk 'NR==3{print $2 ORS $4}' file) )
$ a="${v[0]}"
$ b="${v[1]}"
$ echo "$a,$b"
34,10
于 2012-11-30T14:58:52.110 回答