Gawk distinct and sum column



我对linux和awk的使用非常陌生,无法找到以下问题的答案:

我想使用awk,我的文件结构是这样的:

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

现在,我想总结具有Date和ID的每行的大小,并将其导出到.csv文件。文件看起来应该是这样的:

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

我真的需要你的帮助,因为我自己不知道怎么做,谢谢你。

如果你的输入确实是按日期和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

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

最新更新