AWK数组变量的连接 - 意外行为

时间:2014-06-26 14:37:32

标签: string awk concatenation

输入文件

steve,apples
steve,oranges
john,pears
john,oranges
mary,bananas
steve,plums
mary,nactarines

我想得到这样的输出:

steve:apples,oranges,plums
john:pears,oranges
mary:bananas,nectarines

这是我一直试图开始工作的一个班轮:

awk -F, '{if(a[$1])a[$1]=a[$1]","$2; else a[$1]=$2;}END{for (i in a)print i ":" a[i];}' OFS=, inputfile

它给出的输出是

,orangesrs
,plumsesples
,nactariness

字符串连接a[$1]=a[$1]","$2似乎导致数组元素的原始值在某种程度上被覆盖。如何正确执行此连接?

顺便说一下,我在Centos和Mac OSX上得到了相同的结果。

1 个答案:

答案 0 :(得分:2)

你可以试试这个:

awk -F, '{a[$1]=(a[$1]?a[$1]FS$2:$2)} END {for (i in a) print i":"a[i]}' file
mary:bananas,nactarines
john:pears,oranges
steve:apples,oranges,plums

PS发布后,我发现这与肯特发布的相同,但没有关于为何删除的信息。