我们说我有一个名为 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
,但是我如何接受截断事件呢?还是我还有另一个方向要走? p>
答案 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.但问题出在你的解决方案。