2014-06-26 65 views
1

輸入文件級聯 - 意外的行爲

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

我測試了你的awk行,它在這裏給出了期望的輸出。 – Kent

+0

這很奇怪。我的文件是一位顧客給我的,然後我修改/簡化以顯示這個概念證明。我只是從頭開始重新創建文件,並嘿presto,它的工作原理...所以我想知道爲什麼原始文件不起作用! – Santrix

+3

Arrrghhh!該文件來自Windows機器 - 這是額外的CR導致東西被覆蓋。學習到教訓了! – Santrix

回答

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貼吧後,我看這是同肯特發佈,但沒有資料爲什麼刪除。

+1

@EdMorton我忘了:) – Jotne