0

I want to combine the left hand side data if right hand side data is common. Input :

DAN|ab
NAB|ab
PAT|ab
DAN|asd
DAN|gg
NAB|re
DAN|rr
PAT|rr
NAB|sd
DAN|we
PAT|ww

Output should be:

DAN,NAB,PAT|ab
DAN|asd
DAN|gg
NAB|re
DAN,PAT|rr
NAB|sd
DAN|we
PAT|ww

If right hand side data of pipe is common then merge the left hand side data. Please suggest me any solution.

4

3 に答える 3

1
awk -F"|" '{a[$2]=a[$2]","$1;next}END{for(i in a)print substr(a[i]"|"i,2)}' your_file

テスト済み:

> cat temp
DAN|ab
NAB|ab
PAT|ab
DAN|asd
DAN|gg
NAB|re
DAN|rr
PAT|rr
NAB|sd
DAN|we
PAT|ww
> awk -F"|" '{a[$2]=a[$2]","$1;next}END{for(i in a)print substr(a[i]"|"i,2)}' temp
DAN|gg
DAN|asd
NAB|sd
NAB|re
DAN|we
DAN,PAT|rr
PAT|ww
DAN,NAB,PAT|ab
于 2013-02-22T06:05:26.150 に答える
1

Another one:

awk -F\| '{A[$2]=A[$2] (A[$2]?",":x) $1} END{for(i in A)print A[i] FS i}' file
于 2013-02-22T07:18:54.130 に答える
0
awk '
  BEGIN {FS="|"}
  {if (vals[$2]) { vals[$2]=vals[$2]","$1 } else { vals[$2]=$1 } }
  END { for (key in vals) { print vals[key]"|"key } }
'
于 2013-02-22T05:59:30.420 に答える