我的文件是这样的:
alice, bob
bob, cat
cat, dennis
cat, bob
dennis, alice
我想删除以相反顺序重复相同单词的行。在这个例子中,bob, cat
和cat, 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