带wc -l的grep缓存计数

时间:2018-06-27 11:53:16

标签: bash shell unix grep ubuntu-16.04

我注意到,在使用下面的命令多次进行行计数时,显示了缓存的结果,为什么?

grep "xxx" "filename.log" | wc -l

这将在第一次运行时返回计数值。即使文件具有更多匹配值,再次运行时它仍会提供相同的计数值。

可能是原因。

PS-我正在使用ubuntu 16.04 LTS

更新-grep -c "xxx" filename.log返回正确的计数。仍然想知道为什么上面的命令没有给出更新的结果。

如何确保将缓冲区定期写入文件?

仅供参考-我正在nginx访问日志文件中检查此文件,该文件会不断通过请求调用进行更新,平均写入速度为10 lines/sec.

1 个答案:

答案 0 :(得分:1)

如果新出现的xxx与旧出现的行相同,则可以,因为grep默认情况下会输出整行。您可以使用grep -o在单独的行上输出单个匹配项。顺便说一下,grep -c(或grep -o -c)可用于计数(由于它涉及较少的写入,因此速度更快)。

但是,如果您认为在写入新行之后没有在文件中看到新行(可以使用tail -fless进行连续检查:请按F进行读取新数据和Ctrl-C停止读取),则可能是缓冲原因。 (关于24小时的评论:请注意,缓冲区不会随时间推移而简单刷新,而只会溢出或显式刷新。)您可以尝试调用stdbuf -o0 program ...而不是program ...