$ cat out3.txt
id1|/usr|user1
id2|/root|user5
id1|/usr|user2
id2|/root|user9
id3|/root|user8
id1|/usr|user3
Output required:
-------------------
id1|/usr|user1,user2,user3
id3|/root|user8
id2|/root|user5,user9
i.e.
- sort based on values of 1st and 2nd fields
- get all the corresponding 3rd fields together (comma separated)
$ awk -F "|" '{Arr[$1"|"$2]=sprintf("%s,%s",Arr[$1"|"$2],$3)} END {for ( i in Arr) {printf("%s|%s\n",i,Arr[i])}}' out3.txt | sed 's/|,/|/' > out3.txt.tmp
$ cat out3.txt.tmp
id3|/root|user8
id2|/root|user5,user9
id1|/usr|user1,user2,user3
Another solution:
$ awk 'BEGIN {FS = OFS = "|"}
!arr[$1$2] {arr[$1$2] = $0; next}
{arr[$1$2] = arr[$1$2] "," $3}
END {for(i in arr) {print arr[i]}}
' out3.txt > out3.txt.tmp
$ cat out3.txt.tmp
id1|/usr|user1,user2,user3
id3|/root|user8
id2|/root|user5,user9
Monday, March 10, 2008
Sort based on two fields, merge 3rd fields:AWK
Subscribe to:
Post Comments (Atom)
© Jadu Saikia www.UNIXCL.com
No comments:
Post a Comment