找到比较两个文件的重复对

时间:2018-05-28 15:52:35

标签: linux bash while-loop grep

我有两个文件:

文件1:

A B
C D
F A
C G

文件2:

A G
C D
A C
D C
F A

我想要的是在与文件1进行比较时找到文件2中重复的所有单词对,然后从文件2中删除它们并加入这两个文件。在这种情况下,重复的对是:

C D
D C
F A

请注意,我不希望以相反的顺序使用相同的对。任何单词都可以在两个文件中多次出现。

我尝试了这个但是效率不高,需要额外的步骤来删除文件2中的重复:

cat file1 | while read f1 f2; do grep "$f1 $f2\|$f2 $f1" file2; done > redundancies.txt

grep -vf redundancies.txt file2 > file2b

1 个答案:

答案 0 :(得分:1)

$ grep -vFf f1 f2
A G
A C
D C

这将读取文件2并删除文件1中也存在的所有行。要处理任何顺序的单词,您可以将f1替换为process substitution,并使用两个单词排序打印文件

$ grep -vFf <(cat f1; awk '{print $2,$1}' f1) f2
A G
A C