順序付けされていない重複値を持つ行を削除する

順序付けされていない重複値を持つ行を削除する

数字 1、2、3 のペアを含むファイルがあります。

入力例:

2 1
3 1
1 2
3 2
1 3
2 3

私がやりたいことは、重複した値があるが順序が合わない行の1つを削除することです。

出力例:

2 1
3 1
3 2

たとえば、2 1 は 1 2 に等しいので、行の 1 つを削除します。

数字を簡単に合わせることができるので、小さな例を提供したことに注意してください。 4つ以上の数字をペアで組み合わせたファイルに拡張したいと思います。進行方法がわかりません。すべてのインターネット検索で重複行または重複列が発生します。この質問/タイトルを改善する方法を教えてください。よろしくお願いします!

答え1

私が望むことを達成するための最良の方法は、行の数字をソートしてから重複する項目を削除することです(@alecxsのコメントで提案されているように)。これ解決策例:

awk '$1>$2{$0=$2 OFS $1} 1' example.txt | sort -u

どこ:

$1>$2{$0=$2 OFS $1} sorts each line. sort -u removes duplicate lines.

答え2

別のアプローチは、配列を使用して「表示された」数値ペアを追跡することです。

awk '!a[$1 < $2? $1 FS $2: $2 FS $1]++' file
2 1
3 1
3 2

答え3

たとえば、

~$ cat 1.txt                                                                                                                                                                                   
2 1
3 1
1 2
3 2
1 3
2 3
~$ cat 1.txt| sort -nk1                                                                                                                                                                        
1 2
1 3
2 1
2 3
3 1
3 2

存在するsort -nk1

"n" - 数値ソート用

"k1" - 最初の列に基づいてソートするために使用されます。

関連情報