项目中遇到的一个实际问题,日志以下c#
2013-09-13 00:06:09:adid:10000254 2013-09-13 00:06:14:adid:10000254 2013-09-13 00:06:43:adid:10000253 2013-09-13 00:06:48:adid:10000254 2013-09-13 00:07:07:adid:10000254 2013-09-13 00:07:12:adid:10000254 2013-09-13 00:07:19:adid:10000254 2013-09-13 00:07:32:adid:10000254 2013-09-13 00:08:05:adid:10000254 2013-09-13 00:08:20:adid:10000240 2013-09-13 00:08:28:adid:10000253 2013-09-13 00:08:32:adid:10000253 2013-09-13 00:08:41:adid:10000254 2013-09-13 00:09:02:adid:10000253 2013-09-13 00:09:10:adid:10000254 2013-09-13 00:09:11:adid:10000240 2013-09-13 00:09:18:adid:10000254 2013-09-13 00:09:19:adid:10000254 2013-09-13 00:09:27:adid:10000254 2013-09-13 00:09:28:adid:10000240 2013-09-13 00:09:32:adid:10000253 2013-09-13 00:09:34:adid:10000240 2013-09-13 00:09:59:adid:10000253 2013-09-13 00:10:05:adid:10000254 2013-09-13 00:10:07:adid:10000253
我想要按照小时去统计adid的个数,awk的多维数组在本质上是一维数组,更确切一点,awk在存储上并不支持多维数组。awk提供了逻辑上模拟二维数组的访问方式。例如,array[2,4] = 1这样的访问是容许的。awk使用一个特殊的字符串SUBSEP (\034)做为分割字段,在上面的例子中,关联数组array存储的键值其实是2\0344。 数组
相似一维数组的成员测试,多维数组能够使用 if ( (i,j) in array)这样的语法,可是下标必须放置在圆括号中。相似一维数组的循环访问,多维数组使用 for ( item in array )这样的语法遍历数组。与一维数组不一样的是,多维数组必须使用split()函数来访问单独的下标份量。split ( item, subscr, SUBSEP)。
代码以下:函数
awk ' BEGIN{ ay[1,10]=5; ay[10,2]=12; } END{ for (k in ay) { split(k,idx,SUBSEP); print idx[1],idx[2],ay[idx[1],idx[2]]; } }' 或者 awk ' BEGIN{ ay[1,10]=5; ay[10,2]=12; } END{ for (k in ay) { print k,ay[k]; } }'
获得结果以下:测试
2013-09-13 00 10000239 76 2013-09-13 00 10000240 155 2013-09-13 00 10000253 89 2013-09-13 00 10000254 148 2013-09-13 01 10000180 121 2013-09-13 01 10000181 83 2013-09-13 01 10000239 42 2013-09-13 01 10000240 139 2013-09-13 01 10000253 56 2013-09-13 01 10000254 80 2013-09-13 02 10000180 46 2013-09-13 02 10000181 56 2013-09-13 02 10000239 16 2013-09-13 02 10000240 86 2013-09-13 02 10000253 26 2013-09-13 02 10000254 45