我想获得CSV文件中字段的前N个最常见值 他们在另一个领域的总和。我怎么能用awk做到这一点?
假设我的文件是:
v1,45
v3,20
v2,500
v3,100
v2,200
v1,55
v3,50
v1,10
我需要N = 2个最常出现的字段1值及其对应的field2值的总和 在这种情况下输出将是:
v1,110
v3,170
答案 0 :(得分:1)
awk -F, '{a[$1]+=$2;c[$1]++}END{for(k in c)print c[k], k","a[k]}' file|sort -nr|awk 'NR<3&&$0=$2'
它可以在一个awk中解决,但这更直截了当。 :)
如果您想更改N
,只需修改上一个awk cmd NR<3...
答案 1 :(得分:1)
在Gnu awk中有一个asort
函数,所以你可以做
gawk -f a.awk file
其中a.awk
是:
BEGIN { FS=OFS="," }
{
a[$1]++
b[$1]+=$2
}
END {
for (i in a)
a[i]=a[i]"\t"i
n=asort(a)
for (i=1; i<=n; i++) {
split(a[i],c,"\t")
ind[i]=c[2]
}
for (i=n; i>n-2; i--)
print ind[i],b[ind[i]]
}
输出:
v3,170
v1,110