如何观察尾部新行的数量

如何观察尾部新行的数量

我想做这样的事:

watch tail -f | wc -l
#=> 43
#=> 56
#=> 61
#=> 44
#=> ...

它每秒都会计算出新的尾巴行数

/ Linux,CentOs

更清楚一点。我得到了类似这样的信息:

tail -f /var/log/my_process/*.log | grep error

我正在阅读一些错误消息。现在我想计算一下它们。一秒钟内我遇到了多少个错误。因此日志中的一行代表一个进程中的一个错误。

答案1

我最近发现了 pv,它真的很酷,你可以这样做

tail -f logfile | pv -i2 -ltr > /dev/null

  • -i2 = 每 2 秒计数一次
  • -l = 计数行
  • -t = 打印时间
  • -r = 显示率

答案2

这是一个快速而肮脏的方法。你基本上需要将tailwatch wc分成不同的部分,然后执行以下操作:

tail -f /var/log/my_process/*.log |grep error > /tmp/error.lines &
watch wc /tmp/error.lines

此时,您可以进行数学运算来获得错误/秒数。但是,如果您只是为了一次性检查错误率而这样做,那么快速而粗略的方法可能就足够了。

答案3

如果 pv 不可用,可以使用 perl 来完成:

每一秒:

tail -f  recycleBack*out  | perl -e 'while (<>) {$l++;if (time > $e) {$e=time;$i++;print "$i=> $l\n";$l=0}}'

每 10 秒

tail -f  recycleBack*out  | perl -e 'while (<>) {$l++;if (time > $e+10) {$e=time;$i++;print "$i=> $l\n";$l=0}}'

示例输出:

1=> 1
2=> 1523
3=> 1339
4=> 1508
5=> 1785
6=> 1587
7=> 1770
8=> 1432
9=> 1339
10=> 1555
11=> 1663
12=> 1693
13=> 1647

答案4

您可以尝试这样的事情:

tail -f /var/log/my_process/*.log | perl -pe '$_ = "$. $_"'

它在每行前面打印行号。

相关内容