如何观察尾巴中新行的计数


9

我想做这样的事情:

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

每秒统计尾巴的新行

/ Linux,CentO

更加清楚。我有这样的事情:

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

我正在阅读一些错误消息。现在我要数一数。我在一秒钟内遇到了多少错误。因此,日志中的一行是过程中的一个错误。


你想做什么?如果要观看附加的行,tail -f /path/to/file单独使用就足够了。如果要观看文件行,可以使用watch wc -l /path/to/file
哈立德

@Khaled,我需要注意添加了几行新内容
fl00r 2012年

我将tail与正则表达式一起用于许多文件,并且我想查看一段时间后向所有这些文件附加多少行
fl00r 2012年

1
tail -f /var/log/my_process/*.log |grep error > /tmp/error.lines & ; watch wc /tmp/error.lines?然后做数学。
cjc 2012年

@cjc有效,谢谢!:)你应该把它看作AB的答案
fl00r

Answers:


24

我最近发现了pv,这真的很酷,您可以做类似的事情

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

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

3

这是一种快速而肮脏的方法。您基本上想将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

-1

您可以尝试这样的事情:

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

它在每行的前面打印行号。


1)这不是OP想要的,2)nl将执行此操作,不需要调用perl。
EEAA 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.