匹配另一个文件中的一个文件后的Bash-shell,打印出两个匹配内容,一次不匹配内容

时间:2017-12-05 02:33:15

标签: bash shell awk sed

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

但它失败了。

1 个答案:

答案 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
相关问题