重複を排除してスペースで置き換える

重複を排除してスペースで置き換える

次の表があります

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

おすすめ記事