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ステートメントに入れたいです。また、15分期間のすべてのインスタンスを要約できるように、grepを2回実行する必要があります。 、代わりに単一のgrepステートメントを実行する方法を知っていますか?

ベストアンサー1

問題が2つの正規表現の代わりに1つの正規表現を使用して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分ブロックと一致する必要があります。次の3つのブロックには、次を使用します。

# 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]'

おすすめ記事