我有两个文件,file1和file2。我想比较file1的几列-$ 1,$ 2,$ 3和$ 4与file2的几列$ 1,$ 2,$ 3和$ 4,并打印出与file1中的任何行都不匹配的file2行。

例如。

文件1

aaa bbb ccc 1 2 3
aaa ccc eee 4 5 6
fff sss sss 7 8 9

文件2
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
k1(请参见comments)定界的234FS列的串联值,以后将用作搜索数组a中的键。 NR==FNRtrue,同时读取file1。我在读取a时创建了由k索引的file1数组。

对于其余的输入行,我使用!(k in a)来检查a中是否不存在索引。如果结果为true,那么awk将打印该行。

关于linux - 比较不同文件中的列并打印不匹配的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42165608/

10-10 11:45