我在日志文件中有以下内容,
01:31:01,222收到的事件
01:31:01,435收到的活动
01:31:01,441收到的活动
01:31:01,587收到的活动
01:31:02,110收到的活动
01:31:02,650收到的活动
01:31:02,869收到的活动
01:31:03,034收到的活动
01:31:03,222收到活动
我想用秒对此进行分组,并计算每组中的行数以输出以下内容,
01:31:01 4
01:31:02 3
01:31:03 2
理想情况下,我喜欢在一个简单的awk脚本中执行此操作,而不必使用perl或python,任何想法?感谢。
答案 0 :(得分:3)
听起来像是awk
:
awk -F, '{a[$1]++}END{for(i in a){print i, a[i]}}' file.txt
<强>输出:强>
01:31:01 4
01:31:02 3
01:31:03 2
<强>解释强>
我正在使用选项-F
(字段分隔符)并将其设置为,
。这使得在字段1($1
)中获得秒精度的时间变得容易。
脚本本身的说明(以多行形式):
# Runs on every line and increments a count tied to the first field (the time)
# (The associative array a will get created on first access)
{a[$1]++}
# Runs after all lines have been processed. Iterates trough the array 'a' and prints
# each key (time) and its associated value (count)
END {
for(i in a){
print i, a[i]
}
}
答案 1 :(得分:0)
如果您不关心输出订单,您可以这样做:
cut -d, -f1 file|uniq -c
(如果数据不是最初总是排序的话,在| uniq之前使用| sort)。
产地:
4 01:31:01
3 01:31:02
2 01:31:03