如何使用AWK输出两文件两列比对后的不匹配数据
你之前的命令存在两个核心问题:
- 比对方向搞反了:你需要输出的是file1中没有在file2匹配到的行,但原来的否定逻辑是筛选file2中不匹配file1的行,自然输出的都是file2的内容。
- 键的对应关系写错:你原来的匹配逻辑是
file1的第1、2列对应file2的第2、3列,修改的时候写成($2,$1)完全打乱了列的对应规则,同时要注意awk中!优先级高于in,判断逻辑需要加对括号避免优先级错误。
正确命令
awk -F',' 'NR==FNR { a[$2,$3]=1; next } !(($1,$2) in a) { print $2","$1 }' file2.csv file1.csv
逻辑说明
- 调整输入文件顺序,先读file2.csv,把所有行的第2、3列组合作为键存入数组a
- 再读file1.csv,判断当前行的第1、2列组合不在数组a中时,按你需要的顺序输出第2列、第1列,即可得到期望结果。
内容的提问来源于stack exchange,提问作者adfelko
相关产品推荐
相关产品推荐

