Grep

grep 結果的總和

  • July 2, 2011

我需要在一段時間內輸出 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]'

引用自:https://unix.stackexchange.com/questions/15975