使用 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程序维护一个关联数组n(用于“数字”),其中第一列中的水果名称用作键。n特定水果的值是一串以逗号分隔的数字,由第一个代码块构建。

第一个代码块中看起来有趣的代码将第二列中的值分配给n[$1]如果n[$1]为空,否则它将附加一个逗号并将该值附加到现有值。

该块通过迭代所有键END来打印结果数据。n

相关内容