我对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 ..
循环将以随机(哈希)顺序打印输出。