我想提取当前时间戳和 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