我注意到,在使用下面的命令多次进行行计数时,显示了缓存的结果,为什么?
grep "xxx" "filename.log" | wc -l
这将在第一次运行时返回计数值。即使文件具有更多匹配值,再次运行时它仍会提供相同的计数值。
可能是原因。
PS-我正在使用ubuntu 16.04 LTS
更新-grep -c "xxx" filename.log
返回正确的计数。仍然想知道为什么上面的命令没有给出更新的结果。
如何确保将缓冲区定期写入文件?
仅供参考-我正在nginx访问日志文件中检查此文件,该文件会不断通过请求调用进行更新,平均写入速度为10 lines/sec.
答案 0 :(得分:1)
如果新出现的xxx
与旧出现的行相同,则可以,因为grep
默认情况下会输出整行。您可以使用grep -o
在单独的行上输出单个匹配项。顺便说一下,grep -c
(或grep -o -c
)可用于计数(由于它涉及较少的写入,因此速度更快)。
但是,如果您认为在写入新行之后没有在文件中看到新行(可以使用tail -f
或less
进行连续检查:请按F
进行读取新数据和Ctrl-C
停止读取),则可能是缓冲原因。 (关于24小时的评论:请注意,缓冲区不会随时间推移而简单刷新,而只会溢出或显式刷新。)您可以尝试调用stdbuf -o0 program ...
而不是program ...
。