
次のファイル/テキストがあります。
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
連想配列(「数字」用)を保持します。特定の果物の値は、最初のコードブロックで作成されたカンマ区切りの数値文字列です。n
n
最初のコードブロックの興味深いコードは、空のn[$1]
場合は2番目の列の値を割り当てn[$1]
、それ以外の場合はコンマを追加し、その値を既存の値に追加します。
このブロックはEND
すべてのキーを繰り返して結果データを印刷します。n