最初の列の値に基づいて単語をグループ化します。

最初の列の値に基づいて単語をグループ化します。

最初の列の値に基づいてすべてのファイルの内容をグループ化したいと思います。出力がソートされた形式であれば、より良いでしょう。

入力する:

1 foo
2 bar
1 foobar
2 barbar
3 apple
4 banana
3 mango
5 orange

予想出力:

1 foo, foobar
2 bar, barbar
3 apple, mango
4 banana
5 orange

答え1

私が正しく理解したなら、あなたは探しています

perl -lane 'push @{$k{$F[0]}},$F[1]; 
            END{$"=", ";print "$_ @{$k{$_}}" for sort keys(%k)}' file

明示的に行を分割する理由はありません。フラグ-aはこれを行います。各入力行を@F配列に分割します。したがって、ここでは%kキーが最初のフィールドで値が2番目のフィールドの対応するリストであるハッシュを作成します。次に、最後にハッシュキーを並べ替え、$"リスト区切り記号()を設定し、各キー,[space]とその値のリストを印刷します。

答え2

その他perl:

$ perl -anle '
    push @{$h{$F[0]}}, $F[1];
    END {
        for (sort {$a <=> $b} keys %h) {
            print "$_ ", join(", ", @{$h{$_}});
        }
    }
' file
1 foo, foobar
2 bar, barbar
3 apple, mango
4 banana
5 orange

説明する

  • $hキーが値のハッシュを作成します$F[0]。各ハッシュ値は配列参照です。各行が処理されると、2番目のフィールドの値を配列$F[1]参照に追加しますpush @{$h{$F[0]}}, $F[1]

  • $hすべての行を処理したら、キー()をソートし、各配列sort {$a <=> $b} keys %h参照を文字列(join(", ", @{$h{$_}}))に連結し、関連付けられた文字列に対応する各キーを印刷します。

関連情報