出力列から重複排除

出力列から重複排除

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

ベストアンサー1

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
$

(またはKristanの答えがとてもフレンドリーなので、より簡潔に言えば)

awk '!seen[$1<=$2? $1 FS $2: $2 FS $1]++ {print $1,$2}'

データの空白を気にしない場合は、さらに減らすことができます。

awk '!seen[$1<=$2? $1 FS $2: $2 FS $1]++'

)

これはFSawk の「フィールド区切り文字」変数で、キーフィールド間の境界が正しく識別されるようにするために使用されます。私のソースでは一緒に実行され、$1$2Stephane Chazelasは指摘したようにA BCレプリカAB Cとして扱われます。

おすすめ記事