【问题标题】:Find repeated pairs comparing two files查找比较两个文件的重复对
【发布时间】:2018-05-29 00:26:32
【问题描述】:

我有两个文件:

文件 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

【问题讨论】:

    标签: linux bash while-loop grep


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 2018-03-14
      • 1970-01-01
      • 2010-11-27
      • 2011-06-24
      • 2013-10-02
      相关资源
      最近更新 更多