基于第1列的第2列的总和

时间:2014-10-23 12:24:52

标签: shell unix awk

基于第1列(小时值)的第2列的总和,我有一个文件第1个库是小时,第2个库是计数。 我根据小时库存计算总数,

Input
01:01,15
01:02,16
01:03,6
02:01,44
02:02,33
02:05,22
14:01,55
14:02,06

Output:
01,37
02,99
14,61

我能够通过以下步骤创建所需的输出。

创建唯一的小时文件,下面是示例代码, 而IFS =":"读f1 f2 做

if [ $f1 -eq 01 ]
then
echo $f1":",$f2 >> convertedFile01
fi

然后从转换后的文件中,我将列值相加。但是这个过程会生成24个转换后的文件,有没有办法以简单的方式生成预期的输出?

2 个答案:

答案 0 :(得分:4)

这一个班轮应该做:

awk -F'[,:]' '{a[$1]+=$3}END{for(x in a)print x","a[x]}' file

答案 1 :(得分:2)

保存在数组中,在末尾打印

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

解释

 -F'[:,]' - Sets field separator to either a : or ,

  {a[$1]+=$3} - For each line store the value of the third field in an associative array 
                with the value in the first field as a key

  END{for(i in a) print i","a[i]} - At the end of the file, for each item in 
                         the array, print the key and the value for that key