我对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
我真的需要你的帮助,因为我无法弄清楚如何自己做,谢谢。
答案 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
循环将以随机(散列)顺序打印输出。