Text-Processing

從文件中刪除順序不同的重複行

  • August 5, 2019

我的文件是這樣的:

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

我想刪除以相反順序重複相同單詞的行。在這個例子中,bob, cat並且cat, bob重複,所以 cat bob 應該被刪除,我的輸出應該是

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

我怎樣才能做到這一點?

您可以使用在已排序元素上鍵入的雜湊:

$ 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

慣用的 awk 答案:

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

任意數量的欄位的一般方法是對它們進行排序並使用排序列表作為查看的索引

$$ $$.

引用自:https://unix.stackexchange.com/questions/533824