2つの列でこのようなペアワイズ比較を行った場合に冗長性を削除する*NIXの方法は何ですか
A B
B A
A C
A D
C A
D A
B C
C B
A B
およびB A
同じ比較を表しており、データセットからそのような冗長性を削除したいと思います。最終結果は次のようになります
A B
A C
A D
B C
承認された回答:
doit ()
{
awk '{
key=$1<=$2? $1 FS $2 : $2 FS $1;
if (!seen[key]) print $1,$2
seen[key]=1
}'
}
$ doit <test
A B
A C
A D
B C
$
(または、クリス・ダウンの答えがとても甘いので、それで簡潔になります)
awk '!seen[$1<=$2? $1 FS $2: $2 FS $1]++ {print $1,$2}'
データ内のスペースを気にしない場合は、さらに削減される可能性があります
awk '!seen[$1<=$2? $1 FS $2: $2 FS $1]++'
)
FS
はawkの「フィールドセパレータ」変数であり、キーフィールド間の境界が適切に識別されることを保証するためにここで使用されます。私のオリジナルでは、それらを一緒に実行しました、$1$2
、Stephane Chazelasが指摘したように、これはA BC
を扱っていたでしょう。 およびAB C
重複として。