![使用 awk 统一行](https://linux22.com/image/181083/%E4%BD%BF%E7%94%A8%20awk%20%E7%BB%9F%E4%B8%80%E8%A1%8C.png)
我有以下文件/文本:
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]
如果n[$1]
为空,否则它将附加一个逗号并将该值附加到现有值。
该块通过迭代所有键END
来打印结果数据。n