GNU/Linux >> Linux の 問題 >  >> Linux

出力列から冗長性を削除しますか?

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 重複として。


Linux
  1. 特定の実行可能ファイルからの入力と出力をインターセプトしますか?

  2. Ls-lがLs-sとは異なるサイズを出力するのはなぜですか?

  3. ファイルの 2 列目を出力する

  1. スクリプト出力から制御文字(コンソールコード/色を含む)を削除しますか?

  2. Lum – 2つの別々のファイルからの列のマージ?

  3. ロングからワイドへのgrep出力

  1. Linux – Freeからの出力のBuffers列?

  2. Lsに出力のバイナリからスクリプトを区別させますか?

  3. コマンドの出力をBashを使用して列ごとに分割しますか?