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 语句吗?

答案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 分钟块匹配。对于接下来的三个块,使用这些:

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

相关内容