2014-11-05 62 views
0

在日志文件中,我有以下的grep结果,如何按日期

01:31:01222接收到的事件
01:31:01435接收到的事件
01:31:01441接收到的事件
01:31:01587接收到的事件
01:31:02110接收到的事件
01:31:02650接收到的事件
01:31:02869接收到的事件
01:31:03034接收到的事件
01:31:03222回覆可察觉事件

我想组这个按秒和计数每个组,以输出如下的线的数目,

1点31分01秒4
1点31分02秒3
01: 31:03 2

理想情况下,我喜欢在简单的awk脚本中执行此操作,而不必求助于perl或python,有什么想法?谢谢。

回答

2

听起来像是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] 
    } 
} 
+0

超快速,准确 – Anzel 2014-11-05 19:05:06

+0

抱歉,这是我的第一篇文章误导,请查看更新的文字。我不确定这是否仍然有效。 – liaaba 2014-11-05 19:10:39

+0

@liaaba你试过了吗?我做了,而且工作。为什么它不适合你? – hek2mgl 2014-11-05 19:11:58

0

如果你不关心的输出顺序,你可以做:

cut -d, -f1 file|uniq -c 

(带有|如果数据始终未被排序,则在| uniq之前进行排序)。

产地:

 4 01:31:01 
     3 01:31:02 
     2 01:31:03