代码之家  ›  专栏  ›  技术社区  ›  Swimming bird

按相反顺序删除重复单词对

  •  0
  • Swimming bird  · 技术社区  · 8 年前

    我有这样一个文件示例:

    cat dog
    mouse cat
    dog cat
    dog mouse
    

    我想要的是删除那些包含相同单词但顺序相反的行,在这种情况下,我想要的是“猫狗”,而不是“狗猫”。在真实的文件中,我有大量的单词对(交互),我想删除冗余(我正在处理单向交互)。因此,我希望这样做的结果是:

    cat dog
    mouse cat
    dog mouse
    

    我试过了,但没有返回任何结果:

    cat file | while read f1 f2; do awk -F" " '($1==$f2) && ($2==$f1)' file; done
    

    在这段代码中,我只想找到重复的对。要删除重复,我会这样做:

    cat file | while read f1 f2; do awk -F" " '($1!=$f2) && ($2!=$f1)' file; done
    
    2 回复  |  直到 8 年前
        1
  •  2
  •   Ed Morton    8 年前

    常见的惯用解决方案:

    $ awk '!seen[$1>$2 ? $1 FS $2 : $2 FS $1]++' file
    cat dog
    mouse cat
    dog mouse
    
        2
  •  3
  •   RavinderSingh13 Nikita Bakshi    8 年前

    跟随 awk 可能对你也有帮助。

    awk '{b[$1,$2]} !($2,$1) in b' Input_file
    
    推荐文章