获取最近 30 分钟的日志

获取最近 30 分钟的日志

我想提取当前时间戳和 30 分钟前之间的日志。我开发了下面的脚本,但它无法正常工作,它只显示时间戳行,而我必须在带时间戳的行之间获取未加时间戳的日志行。我有一个包含此模式的日志文件:

脚本:

awk -v TSTART="$(date -v -30M "+%Y-%m-%d %H:%M")" -v TEND="$(date "+%Y-%m-%d %H:%M")" '$0>=TSTART && $0<=TEND' webservice_logs.log

日志文件模式:

答案1

您可以根据仅在第一个字段是日期字段时设置的标志来打印行。请参阅以下带有标志的代码,p指示 awk 打印 (when p==1) 或跳过 (when p==0) 该行

awk -v tstart="$start" -v tend="$end" '
    /^[0-9]{4}-[0-9]{2}-[0-9]{2}/ {
        t = $1 " " $2
        p = t >= tstart && t <= tend ? 1 : 0
    }p' webservice_logs.log

由于 ERROR 行的开头没有时间戳,因此这些行上没有标志更改。

编辑在一行上:

awk -v tstart="$start" -v tend="$end" '/^[0-9]{4}-[0-9]{2}-[0-9]{2}/{t = $1 " " substr($2,1,5); p = t >= tstart && t <= tend ? 1 : 0}p' webservice_logs.log

答案2

你可以试试这个

awk -vStartDate=`date -d'now-30 min' +%H:%M:%S` '{ if ($2 > StartDate) print $0}' web.log

相关内容