根据另一列对列进行求和

时间:2014-11-17 09:39:53

标签: linux shell unix awk

我有一个包含2列的文件,第1列是HH:MM:SS格式的时间,第2列是计数。
我想总结第2列为基础的第一个库。关于第1栏的小时和分钟。

输入:

00:00:00,2.00,
00:00:10,1.00,
00:00:20,2.00,
00:00:30,6.00,
00:00:40,1.00,
00:00:50,7.00,
00:01:00,8.00,
00:01:10,7.00,
00:01:20,8.00,
00:01:30,11.00,

For Hour:以下awk工作,

 awk -F, '{ a[substr($1,0,2)]+=$2 } END{ for (i in a) print i "," a[i] }' file

输出:

00,53

分钟:
无法根据Minute提交的总和,请提出获得预期结果的方法。

例外输出:

00:00,19
00:01,34

2 个答案:

答案 0 :(得分:6)

使用`awk:

awk -F '[:,]' -v OFS=, '{s[$1 ":" $2]+=$(NF-1)} END{for (i in s) print i, s[i]}' file
00:00,19
00:01,34

编辑:如果原始时间戳的排序很重要,请使用:

awk -F '[:,]' -v OFS=, '{k=$1":"$2} !s[k]{b[++n]=k} {s[k]+=$(NF-1)}
     END {for (i=1; i<=n; i++) print b[i], s[b[i]]}' file
00:00,19
00:01,34

答案 1 :(得分:2)

您需要在一小时内添加分钟数,然后计算。

awk -F, '{ a[substr($1,0,2)+substr($1,4,2)]+=$2 } END{ for (i in a) print i "," a[i] }'
0,19
1,34

然后你可以使用一些数学和printf进行格式化。