awk对table的统计计算

第三列相同时,第四列累加

1
2
3
4
awk 'BEGIN{FS=OFS="\t"} \
NR>1 \
{a[$3]+=$4} \
END {for (i in a) {print i,a[i]}}' text.txt | sort

awk中的数组由一对字符串组成,第一个字符串是‘index’,第二个是index所对应的valuea[$3]+=$4中的index来自第三列,value是第四列相应值的累加。
用asorti在awk中排序

1
2
3
4
awk 'BEGIN{FS=OFS="\t"} \
NR>1 \
{a[$3]+=$4} \
END {n=asorti(a,b);for (i=1;i<=n;i++) {print b[i],a[b[i]]}}' text.txt

依据第三列和第二列,第四列累加

1
2
3
4
awk 'BEGIN{FS=OFS="\t"} \
NR>1 \
{a[$3$2]+=$4} \
END {n=asorti(a,b);for (i=1;i<=n;i++) {print b[i],a[b[i]]}}' text.txt

第三列相同时,第四列的最大值

1
awk -F, '{if (a[$1] < $2)a[$1]=$2;}END{for(i in a){print i,a[i];}}' OFS=, file.txt

第三列相同值计数

1
awk -F, '{a[$1]++;}END{for (i in a)print i, a[i];}' file.txt

第三列相同时,仅输出第四列第一个值

1
awk -F, '!a[$1]++' file.txt

第三列相同时,第四列的所有值并未一行

1
awk -F, '{if(a[$1])a[$1]=a[$1]":"$2; else a[$1]=$2;}END{for (i in a)print i, a[i];}' OFS=, file.txt

参考资料

A Pivot Table In AWK
awk - 10 examples to group data in a CSV or text file

本文固定链接:http://tiramisutes.github.io/2016/10/01/table-stats.html 转载请注明出处!

tiramisutes wechat

热评文章