以相反的顺序删除重复的单词对

时间:2018-05-27 18:17:56

标签: linux bash awk while-loop

我有一个像这个例子的文件:

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 个答案:

答案 0 :(得分:3)

关注awk '{b[$1,$2]} !($2,$1) in b' Input_file 可能对您有帮助。

<div id="container">
  <img style="margin-left:auto;margin-right:auto;"></img>
</div>

答案 1 :(得分:2)

常见的惯用解决方案:

$ awk '!seen[$1>$2 ? $1 FS $2 : $2 FS $1]++' file
cat dog
mouse cat
dog mouse