根据多列匹配(一些部分)总结一列

时间:2017-06-28 17:55:36

标签: bash awk

我有一个如下文件。

7404920998 May 18 04:22 20161229.data
8775804219 May 18 04:23 20161230.data
11168788265 May 17 22:07 20170103.data
9374414428 May 17 22:03 20170104.data

我想根据匹配字段column2(月份)和第5列(年份)的前四个字符来总结第1列。然后打印每个月和每年的阵列。

输出:

16180725217 May 2016
20543202693 May 2017

我相信我通过输入

找出如何按月和年总结
awk '{if($2 == "<month>" && $5 ~ /<year>/) i+=$1} END {print i, $2, substr($5, 0, 4)}' <file>

但是如何创建一个匹配这两个条件的条件数组并打印出我想要的输出?

1 个答案:

答案 0 :(得分:3)

awk救援!

$ awk   '{a[$2 FS substr($5,1,4)]+=$1} 
     END {for(k in a) print a[k],k}' file | sort -k3n -k2,2M

16180725217 May 2016
20543202693 May 2017