我有以下结构(只有一行)
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。
答案 0 :(得分:4)
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