一定期間、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]'