cat fiel1.txt
cheng 600
huang 500
pan 400
yin 300
cat file2.txt
600 a
300 c
执行后
awk 'NR==FNR{a[$1]=$2;next}($2 in a){print $1,$2,a[$2]}' f2.txt f1.txt
结果如下:
cheng 600 a
yin 300 c
我还想打印不在数组a中的列。如下所示:
cheng 600 a
huang 500
pan 400
yin 300 c
我如何得到结果。我尝试如下命令:
awk 'NR==FNR{a[$1]=$2;next}($2 in a){print $1,$2,a[$2]}($2 not in a){print $1,$2,a[$2]}' f2.txt f1.txt
但它失败了。
答案 0 :(得分:1)
$ awk 'NR==FNR{a[$1]=$2;next} {if($2 in a)print $1,$2,a[$2]; else print $1,$2}' f2.txt f1.txt
cheng 600 a
huang 500
pan 400
yin 300 c
你有:
($2 in a){print $1,$2,a[$2]}
仅当$2
位于a
时才会打印。我们将其替换为:
if($2 in a)print $1,$2,a[$2]; else print $1,$2
此$1,$2,a[$2]
的{{1}}打印位于$2
。否则,它只会打印a
。
如果你介意一些无关的尾随空白,我们可以使用更简单的:
$1,$2