Gawk distinct和sum列

时间:2016-11-17 14:39:59

标签: arrays csv awk sum gawk

我对linux和awk的使用都很陌生,无法找到我的后续问题的答案:

我想使用awk,我的文件结构如下:

Date ID Size
2016-11-09 688 47
2016-11-09 688 56
2016-11-09 31640 55

现在,我想总结具有日期和ID的每一行的大小,并将其导出到.csv文件。 该文件应如下所示:

Date,ID,Size
2016-11-09,688,103
2016-11-09,31640 55

我真的需要你的帮助,因为我无法弄清楚如何自己做,谢谢。

1 个答案:

答案 0 :(得分:2)

如果您的输入确实按照样本中的日期和ID排序,那么您应该使用:

$ cat tst.awk
BEGIN { OFS="," }
NR==1 { $1=$1; print; next }
{ curr = $1 OFS $2 }
(curr != prev) && (NR > 2) { print prev, sum; sum=0 }
{ prev = curr; sum += $3 }
END { print prev, sum }

$ awk -f tst.awk file
Date,ID,Size
2016-11-09,688,103
2016-11-09,31640,55

而不是将整个文件保存在内存中。请注意,此方法也将以与输入相同的顺序生成输出,而for .. in ..部分中的任何END循环将以随机(散列)顺序打印输出。