SED截取指定时间段日志

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37886429/article/details/82414066

需求:对tomcat的日志每半个小时分析一次,如果出现指定字段就报警
由于这边所有的日志都是输入到一个文件中,所以我第一时间想到的是用sed来截取指定时间段的日志,然后输出到另一个文件中,然后对这个文件的内容进行分析即可。

在执行过程中,发现如果用sed截取日期的可以,但是如果截取后面的时分秒需要用到正则表达式,下面是我些的脚本,可以参考下:

#!/bin/bash
base_path="/data/sercices"
tmpfile="/tmp/test.log"

#获取当前时间和30分钟之前的时间
currenttime=$(date "+%F %H:%M")         #格式:2018-08-29 16:42:05
lasttime=$(date "+%F %H"  -d "30 minute ago")

#截取当前的时间做正则匹配,按照分钟是和30多对比
MI=`echo $currenttime | awk -F':' '{print $2}'`
if [ $MI -ge 30 ]
then
    start_time=$(date "+%F %H"):[0][0-9]
    end_time=$(date "+%F %H"):[3][0-9]
else 
    start_time=$(date "+%F %H"  -d "30 minute ago"):[3][0-9]
    end_time=$(date "+%F %H"):[0][0-9]
fi

#echo ${start_time}
#echo ${end_time}

#截取指定时间段的日志文件
cd ${base_path}
sed -n "/${start_time}/,/${end_time}/p" nohup.out > $tmpfile

#判断指定字段出现的次数
num=$(egrep 'CommunicationsException|NullPointerException' $tmpfile | wc -l )
echo $num

猜你喜欢

转载自blog.csdn.net/m0_37886429/article/details/82414066