awkを使用した行の統合

awkを使用した行の統合

次のファイル/テキストがあります。

apple 1
apple 2
apple 3
banana 22
banana 5
string 1

次の結果を返すには、コマンドをどのように実行する必要がありますか?

apple numbers:1,2,3
banana numbers:22,5
string numbers:1

ベストアンサー1

$ awk '{ n[$1] = (n[$1] == "" ? $2 : n[$1] "," $2) } END { for (f in n) printf "%s numbers:%s\n", f, n[f] }' file
apple numbers:1,2,3
banana numbers:22,5
string numbers:1

これはタスクを解決するために使用されますawk

プログラムは、キーとして使用される最初の列のフルーツ名とともに、awk連想配列(「数字」用)を保持します。特定の果物の値は、最初のコードブロックで作成されたカンマ区切りの数値文字列です。nn

最初のコードブロックの興味深いコードは、空のn[$1]場合は2番目の列の値を割り当てn[$1]、それ以外の場合はコンマを追加し、その値を既存の値に追加します。

このブロックはENDすべてのキーを繰り返して結果データを印刷します。n

おすすめ記事