Linux group by,sum and count

时间:2017-11-17 15:50:18

标签: linux bash shell

从目录列表中,我创建了一个输出,该输出显示第1列中的文件大小和第2列中文件名的一部分(它是一个日期)。

178694671 2017-10-14
175332227 2017-10-14
175021608 2017-10-14
174851281 2017-10-14
175316643 2017-10-14

我现在需要做的是分组,总结和统计此列表。按列2分组并计算文件,并将与每个分组关联的文件大小相加。

上述输出的结果如下所示:

879216430 2017-10-14 5

我试过这个

awk '{sum[$1]+= $2;}END{for (date in sum){print sum[date], date;}}'

但它提供了奇怪的结果,我并不真正理解它在做什么。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

使用另一个关联数组存储日期频率,如下所示:

awk '{++freq[$2]; sum[$2]+=$1}
END{for (date in sum) print sum[date], date, freq[date]}' file

879216430 2017-10-14 5

另请注意,您的数组的关键字为$2,即日期不是$1