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
我还想打印不在数组中的列。如下:
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
但失败了。
$ 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]
是$2
在a
中。否则,它只是打印$1,$2
。
更简单的版本
如果您介意一些无关紧要的毛坯,我们可以使用更简单的:
$ awk 'NR==FNR{a[$1]=$2;next} {print $1,$2,a[$2]}' f2.txt f1.txt
cheng 600 a
huang 500
pan 400
yin 300 c