2016-12-23 45 views
0

对不起,如果标题没有说清楚。计算文件中出现的次数。条件模式匹配

我有一个文件要每15分钟读一遍,并在其中找到一个特定的模式(例如超时)。文件没有任何固定的更新频率。

预期结果: - 1.如果在15分钟内发现3次模式,请运行命令1。 2.如果在15分钟内发现5次模式,请运行命令2。

要从每次检查的最后读取位置读取文件。

感谢, GRV

+4

你到目前为止试过了什么?最粗略的实现是每次读取模式发生的总次数,并将该次数存储在文件中。每隔15分钟一次,将当前计数与先前存储的数量进行比较,依此类推。 – codeforester

+0

告诉我们您的代码 –

回答

0

的一种方式做,这是一个cron工作。它比其他解决方案更为复杂,但它非常可靠(即使您的“检查脚本”崩溃,在该时间段过后它将再次被cron调用)。该cron可能是:

*/15 * * * * env DISPLAY=:0 /folder/checkscript >/dev/null 2>&1 

env DISPLAY=:0可能不是你的情况是必要的,也可能是必要的,这取决于你的脚本(注:你可能需要这个适应你的情况下,运行回声$DISPLAY找到把你的变量放在案例中)。

"checkscript"可能是:

#!/bin/bash 
if [ -f /tmp/checkVarCount ]; then oldCheckVar="$(cat /tmp/checkVarCount)"; else oldCheckVar="0"; fi 
checkVar="$(grep -o "pattern" /folder/file | wc -l)" 
echo "$checkVar" > /tmp/checkVarCount 
checkVar="$(($checkVar-$oldCheckVar))" 
if [ "$checkVar" -eq 3 ]; then command1; fi 
if [ "$checkVar" -eq 5 ]; then command2; fi 
exit 

它不包括在你的问题,但如果你的意思是要执行的命令,以及如果该模式被发现的4倍或7倍,那么你可以改变以上相关部分为:

if [ "$checkVar" -ge 3 ] && [ "$checkVar" -lt 5 ]; then command1; fi 
if [ "$checkVar" -ge 5 ]; then command2; fi 
+0

使用cron作业设置显示有什么意义? – diametralpitch

+0

从'cron'调用某些程序时,如果没有此环境变量,则无法运行。 –

相关问题