Grep
grep 結果的總和
我需要在一段時間內輸出 grep 結果的總和,現在我對時間 grep 進行了硬編碼,但非常感謝任何幫助,我的問題是我無法在腳本上輸出結果。
如果我使用這條線,它會給我一個輸出 1:
cat *.log | egrep '2011-07-01 (04:[0][0-9]:[0-5][1-9]|04:10:00)' * | grep -ach '0110 478655 .. 51' | awk '{SUM += $1} END { print SUM }'
這條線會給我一個 0 的輸出:
cat *.log | egrep '2011-07-01 (04:[1][0-4]:[0-5][1-9]|04:15:00)' * | grep -ach '0110 478655 .. 51' | awk '{SUM += $1} END { print SUM }'
這段程式碼需要很多改進:
while read line do cd $DIR ta1=`cat *.log | egrep '2011-07-01 (04:[0][0-9]:[0-5][1-9]|04:10:00)' * | grep -ach '0110 478655 .. 51' | awk '{SUM += $1} END { print SUM }'` ta2=`cat *.log | egrep '2011-07-01 (04:[1][0-4]:[0-5][1-9]|04:15:00)' * | grep -ach '0110 478655 .. 51' | awk '{SUM += $1} END { print SUM }'` ta=$((ta1 + ta2)) echo -e "Results = $ta " done
我想添加結果並將其放在 while do 語句中,我還需要兩個 grep 以便我可以總結所有實例的 15 分鐘週期。知道如何改為執行單個 grep 語句嗎?
如果您的問題只是讓 grep 匹配一個 15 分鐘的視窗,一個正則表達式而不是兩個,請嘗試像這樣分解它:
改變:
egrep '2011-07-01 (04:[0][0-9]:[0-5][1-9]|04:10:00)' egrep '2011-07-01 (04:[1][0-4]:[0-5][1-9]|04:15:00)'
到:
egrep '2011-07-01 04:(0[0-9]|1[0-4]):[0-5][0-9]'
這應該與從 00:00 開始到 14:59 結束的 15 分鐘塊相匹配。對於接下來的三個塊使用這些:
# 15:00 to 29:59 egrep '2011-07-01 04:(1[5-9]|2[0-9]):[0-5][0-9]' # 30:00 to 44:59 egrep '2011-07-01 04:(3[0-9]|4[0-4]):[0-5][0-9]' # 45:00 to 59:59 egrep '2011-07-01 04:(4[5-9]|5[0-9]):[0-5][0-9]'