从文件中删除顺序不同的重复行

从文件中删除顺序不同的重复行

我的文件是这样的:

alice, bob
bob, cat
cat, dennis
cat, bob
dennis, alice

我想删除以相反顺序重复相同单词的行。在这个例子中,bob, catcat, bob被重复,所以 cat bob 应该被删除,我的输出应该是

alice, bob
bob, cat
cat, dennis
dennis, alice

我怎样才能做到这一点?

答案1

您可以使用以排序元素为键的哈希:

$ perl -lne 'print unless $h{join ",", sort split /, /, $_}++' file
alice, bob
bob, cat
cat, dennis
dennis, alice

对于正好 2 个字段,这样的东西可能就足够了

$ awk -F', ' '!seen[$2 FS $1]; {seen[$0]++}' file
alice, bob
bob, cat
cat, dennis
dennis, alice

答案2

awk 的惯用答案是:

$ awk -F', ' '!seen[$1>$2 ? $1 FS $2 : $2 FS $1]++' file
alice, bob
bob, cat
cat, dennis
dennis, alice

对于任意数量的字段,一般方法是对它们进行排序,并使用排序后的列表作为 saw[] 的索引。

答案3

这将按字段对每一行进行排序,然后对文件进行排序,并仅选择唯一的行

while read line
  do
    echo $line |
    tr ' ,' '\n' |
    sort |
    tr '\n' ','
done < 1 |
sed -e 's/^,//' -e 's/,$//' -e 's/,,/\n/g' |
sort -u

相关内容