linux - 查找重复对比较两个文件

标签 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

最佳答案

$ 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

关于linux - 查找重复对比较两个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50569905/

相关文章:

Linux mint 增加游标大小超过默认最大值

bash - grep 获取 <div> 内容

bash - 为什么 `cat <(cat)`会产生EIO?

bash - 如何将输出附加到文本文件的末尾

linux - 将格式为 DD/MM/YYYY 的日期转换为从 01/01/1970 开始所花费的秒数?

linux - 需要增加HTTP并发连接数到85000

php - Foreach:为指定行数添加换行符(段落)的正确方法

java - do-while(false) 的优点是什么?

C while 循环棘手的异常

c - 发送文件(客户端到服务器和服务器到客户端)