2016-12-23 89 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'調用某些程序時,如果沒有此環境變量,則無法運行。 –

相關問題