tail、grep 并计算在一个命令中找到的实例?

tail、grep 并计算在一个命令中找到的实例?

我正在跟踪文件输出并查找包含特定数据的行。我不想将数据输出到屏幕上,而是计算找到的实例数并将其发送到屏幕上。实例数可以滚动和递增,也可以覆盖现有实例,并且仅在其递增时才显示。那部分并不重要,我只需要找到的实例的运行计数。

我现在的命令是

tail -f 日志文件 | grep'我想要的数据'

我尝试使用 grep -c 和 wc -l,但没有得到我想要的结果。这个特定的 Linux 发行版没有 pv,无法获取它。有什么办法可以做到这一点吗?

答案1

GNU awk 可以相当轻松地做到这一点。

滾動輸出:

tail -f logfile | grep 'stuff to grep for' | awk '{++i;print i}'

您还可以省略 grep 并改用 awk 的正则表达式:

tail -f logfile | awk '/stuff to grep for/ {++i;print i}'

对于单行输出,您可以在前面添加 CR 使其再次从行的最前面开始(在控制台上有效):

tail -f logfile | awk '/stuff to grep for/ {++i;printf "\r%d",i}'

答案2

总是有一个值得信赖的watch选择:

 watch -d grep -c "string" /path/to/file 

当您的文件大小超过几百 MB 时,这种方法并不理想。

感谢@sa289 使用中间文件的建议:

 tail -f /path/to/file |grep "string" > /tmp/intermediate-file &
 watch -d grep -c "string" /tmp/intermediate-file

相关内容