保留截断文件中的出现次数

时间:2015-01-13 11:44:50

标签: bash grep counter cat wc

我们说我有一个名为 data.log 的文件。

数据会不断附加到其中,其中可能包含' 标记'并且它被外部脚本截断:

  

[13 / Jan / 2015:11:11:53 +0000] curabitur flag lacinia nibh in feugiat mollis

     

tail:data.log:文件被截断

     

[13 / Jan / 2015:11:11:53 +0000] dapibus enim sagittis efficitur

     

[13 / Jan / 2015:11:11:54 +0000] iaculis non flag ac urna。

声明counter=0后,我想用已发现的事件数量递增它。我提出了类似这样的内容,它使用wc -l来计算包含' 标志 data.log 中的行:

counter=$(($counter+$(cat data.log | grep s | wc -l)))
echo $counter

现在只剩下一个问题:截断。我该如何处理?我想过做一个watch,但是我如何接受截断事件呢?还是我还有另一个方向要走?

1 个答案:

答案 0 :(得分:1)

这应该适合你:

$ tail -F data.log | grep --line-buffered s | while read match ; do ((counter++)) ; done

-F的{​​{1}}标记与tail相同。 --follow --retry在这里很神奇:

--retry

我还将 --retry keep trying to open a file even when it is or becomes inaccessi‐ ble; useful when following by name, i.e., with --follow=name --line-buffered一起使用,以避免需要等待输出的while循环。

我刚刚意识到的一个问题是:如果 flag 每行都出现多次,grep仍然只会增加1.但问题出在你的解决方案。