次の表があります
fruits shopname
Apple x1
orange x1
banana x2
Apple x3
orange x2
banana x3
列1に基づいてすべての行をグループ化し、重複項目を空白に置き換えたいと思います。
以下のように見えます。
fruits shopname
Apple x1
x3
banana x2
x3
orange x1
x2
コマンドを使用して重複エントリを削除できることを知っていますuniq
。しかし、ここではグループ化し、重複する項目を空白に変更したいと思います。
ベストアンサー1
ファイルを1行ずつ読み、果物と果物を結合する関数を構築する必要があります。リスト店舗番号。 awkの多次元配列またはGNU awkの配列配列を使用してこれを実行できます。
次に、ファイルを読んだ後、果物を繰り返し、各果物の各店舗の行を印刷します。
私はこの目的でPerlを使いますが、Perlの構文は少し圧倒的です。
perl -lane '
if ($. == 1) {print; next}
push @{$shops{$F[0]}}, $F[1];
}END{
for $fruit (sort {lc $a cmp lc $b} keys %shops) {
$label = $fruit;
for $shop (@{$shops{$fruit}}) {
printf "%s\t%s\n", $label, $shop;
$label = "";
}
}
' file