String AWK数组变量的串联-意外行为

String AWK数组变量的串联-意外行为,string,awk,concatenation,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;}E

输入文件

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上得到了相同的结果。

您可以尝试以下方法:

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发布后,我看到这与Kent发布的相同,但没有关于删除原因的信息。

我测试了您的awk行,它在这里给出了所需的输出。这很奇怪。我拥有的文件是一位客户给我的,我随后修改/简化了该文件,以展示这一概念证明。我刚刚从头开始重新创建了这个文件,嘿,普雷斯托,它工作正常。。。所以我想知道为什么原始文件不起作用!啊!该文件来自Windows计算机-是额外的CR导致内容被覆盖。吸取教训@埃德蒙顿:我确实忘记了:)