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