我有一个这样的数据文件:
id1 name1 cat1 catname1
id1 name1 cat2 catname2
id2 name2 cat3 catname3
id3 name3 cat1 catname1
id3 name3 cat4 catname4
我想生成以下内容:
id1 name1 cat1:catname1, cat2:catname2
id2 name2 cat3:catname3
id3 name3 cat1:catname1, cat4:catname4
有没有办法用AWK做到这一点?
答案 0 :(得分:2)
试试这个:
$ awk '
(($1 FS $2) in a) {
a[$1 FS $2] = a[$1 FS $2] ", " $(NF-1) ":" $NF
next
}
{ a[$1 FS $2] = $(NF-1) ":" $NF }
END {
for(x in a)
print x, a[x]
}' file
id2 name2 cat3:catname3
id1 name1 cat1:catname1, cat2:catname2
id3 name3 cat1:catname1, cat4:catname4
如果订单很重要,您可以尝试使用gnu-awk
备用:
$ gawk '
(($1 FS $2) in a) {
a[$1 FS $2] = a[$1 FS $2] ", " $(NF-1) ":" $NF
next
}
{ a[$1 FS $2] = $(NF-1) ":" $NF }
END {
n = asorti(a,s)
for(x=1; x<=n; x++)
print s[x], a[s[x]]
}' file
id1 name1 cat1:catname1, cat2:catname2
id2 name2 cat3:catname3
id3 name3 cat1:catname1, cat4:catname4
答案 1 :(得分:1)
这是使用awk
awk '{a[$1FS$2]=a[$1FS$2]?a[$1FS$2]$3FS$4:$3FS$4} END {for (i in a) print i,a[i]}' file
id2 name2 cat3 catname3
id1 name1 cat1 catname1cat2 catname2
id3 name3 cat1 catname1cat4 catname4