我有两个文件,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
k
是1
(请参见comments)定界的2
,3
,4
和FS
列的串联值,以后将用作搜索数组a
中的键。 NR==FNR
是true
,同时读取file1
。我在读取a
时创建了由k
索引的file1
数组。对于其余的输入行,我使用
!(k in a)
来检查a
中是否不存在索引。如果结果为true
,那么awk
将打印该行。关于linux - 比较不同文件中的列并打印不匹配的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42165608/