在匹配另一个文件的一个文件之后,打印出两个匹配内容,并且一次不匹配内容


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]}

仅当$2a中时才打印。我们用:

替换了
if($2 in a)print $1,$2,a[$2]; else print $1,$2

此打印$1,$2,a[$2]$2a中。否则,它只是打印$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

相关内容

最新更新