我正在看一个带时间戳的日志文件。日志经常会写一条消息,“OK”
我怎样才能捕获每秒写入“OK”的数量?例如。输出如
10.5 OK/sec
9 OK/sec
20 OK/sec
日志非常大,在整个文件上执行grep是不切实际的。我从
开始tail -f my.log | grep OK
这很有帮助,但并不能让我得到这个价格。
谢谢!
下面的第一个解决方案很棒(其他方面也很好),我稍微修改了一下这就是我提出的方法
tail -f my.log | perl -lne 'if(/(\d+:\d+:\d+).*OK/) { print $1; }'| uniq -c
答案 0 :(得分:3)
当你的日志形式如下:
Wed Jul 10 22:44:00 CEST 2013 OK
Wed Jul 10 22:44:00 CEST 2013 OK
Wed Jul 10 22:44:00 CEST 2013 OK
Wed Jul 10 22:44:00 CEST 2013 OK
Wed Jul 10 22:44:01 CEST 2013 OK
Wed Jul 10 22:44:01 CEST 2013 OK
Wed Jul 10 22:44:01 CEST 2013 OK
Wed Jul 10 22:44:01 CEST 2013 OK
Wed Jul 10 22:44:01 CEST 2013 OK
Wed Jul 10 22:44:01 CEST 2013 OK
Wed Jul 10 22:44:01 CEST 2013 OK
Wed Jul 10 22:44:01 CEST 2013 OK
因此,在timestamp OK
格式中,您可以尝试简单的方法:
tail -f logfile | uniq -c
您将获得下一个结果:
4 Wed Jul 10 22:44:00 CEST 2013 OK
8 Wed Jul 10 22:44:01 CEST 2013 OK
^
+---- number of OK in the same timestamp
答案 1 :(得分:1)
这是一个快速编写脚本的脚本:
#! /bin/bash
log="/var/log/messages"
seconds="1"
filter="OK"
while true; do
echo "$(timeout $seconds tail -n0 -f $log|grep $filter|wc -l) OK/sec"
done
有一些竞争条件,它可能会在循环中丢失一两行,但不太可能。此外,并非每个Linux发行版都默认安装timeout
,因此您可能需要检查。