0
これは、uniqコマンドを実行するようなものでなければならないが、列によって実行する必要があります。例えば:Linuxで重複した列を削除する最も良い方法
A B C B
A C B C
A A A A
第二及び第四列は同一です。次の結果を得るための最良の方法はどれですか?
A B C
C B
A A A
しかし、最初に、それは多くの行のUNIQコマンドと同じように、同一である列は不明です。
これは、uniqコマンドを実行するようなものでなければならないが、列によって実行する必要があります。例えば:Linuxで重複した列を削除する最も良い方法
A B C B
A C B C
A A A A
第二及び第四列は同一です。次の結果を得るための最良の方法はどれですか?
A B C
C B
A A A
しかし、最初に、それは多くの行のUNIQコマンドと同じように、同一である列は不明です。
レスキューへのPerl!
@c = ([ 'A', 'A', 'A' ],
[ 'B', 'C', 'A' ],
[ 'C', 'B', 'A' ],
[ 'B', 'C', 'A' ]);
}{
(いわゆる「エスキモー挨拶」)後のコードの実行からライン毎のコードの実行を分離する:それは次の構造を作成する、すなわち
perl -lane '
push @{ $c[$_] }, $F[$_] for 0 .. $#F;
}{
for (@c) {
$s = join "|", @$_;
$seen{$s}++ or push @r, $_;
}
print join " ", map shift @$_, @r while @{ $r[0] }
' -- inputfile
は、最初の行は、入力を旋回します入力全体が処理されました。これは@cアレイを歩くのみ等A|A|A
、B|C|A
、ようにそれらのそれぞれからの文字列を作成し、%seen
ハッシュに格納することにより、(一意の列を保持する。
構造があろう
@r = ([ 'A', 'A', 'A' ],
[ 'B', 'C', 'A' ],
[ 'C', 'B', 'A' ]);
それが戻って結果を旋回させる。すなわち
とハッシュが
%seen = ('B|C|A' => 2,
'A|A|A' => 1,
'C|B|A' => 1
);
のようになります。最後の印刷は、各列の最初の要素をシフト。
列がユニークであることを意図している場合、最後の列は「A A」ではなく「A A A」であるべきですか? –