我有两个文件,file1 和 file2。我想将 file1 的几列 - $1,$2 ,$3 和 $4 与 file2 的几列 $1,$2, $3 和 $4 进行比较,并打印 file2 中与 file1 中任何行都不匹配的那些行。
E.g.
file1
aaa bbb ccc 1 2 3
aaa ccc eee 4 5 6
fff sss sss 7 8 9
file2
aaa bbb ccc 1 f a
mmm nnn ooo 1 d e
aaa ccc eee 4 a b
ppp qqq rrr 4 e a
sss ttt uuu 7 m n
fff sss sss 7 5 6
我想要作为输出:
mmm nnn ooo 1 d e
ppp qqq rrr 4 e a
sss ttt uuu 7 m n
我已经看到这里提出的问题,要求找到那些匹配的内容并打印它们,但反之亦然,那些不匹配的内容。
谢谢你!
使用以下脚本:
awk '{k=$1 FS $2 FS $3 FS $4} NR==FNR{a[k]; next} !(k in a)' file1 file2
k
是列的串联值1
, 2
, 3
and 4
,由以下分隔FS
(see comments https://stackoverflow.com/questions/42165608/compare-columns-from-different-files-and-print-those-that-do-not-match/42165712?noredirect=1#comment71502983_42165712),并将用作搜索数组中的键a
later. NR==FNR
is true
在读的时候file1
。我正在创建数组a
索引为k
在读的时候file1
.
对于剩余的输入行,我检查!(k in a)
如果索引不存在于a
。如果评估结果为true
awk
将打印该行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)