我有以下格式,
2015-04-12 11:22:04,876 - Logs - Error: OSError(16, 'Error in NAS')
2015-04-12 11:37:37,242 - Logs - Error: OSError(16, 'Error in NAS')
我想只获得最后10分钟的线路并搜索" OSError(16,' NAS中的错误')"
我不能grep和错误,但无法实现grep的日期和时间
任何建议
答案 0 :(得分:2)
我使用了python:
with open('access.log') as f:
for line in f:
logdate = datetime.strptime(line.split(',')[0], '%Y-%m-%d %H:%M:%S')
if logdate >= datetime.now() - timedelta(minutes=10):
print(line)
答案 1 :(得分:1)
要使用所需的日志时间过滤行,您可以使用:
perl -mTime::Piece=:override -F, -lane 'my $now = gmtime();
print if $now - Time::Piece->strptime("$F[0]", "%Y-%m-%d %H:%M:%S")< 600' input-file
这使用Time :: Piece-&gt; strptime将时间戳解析为可用的Time :: Piece对象,该对象支持比较。通过导入:override,对gmtime
的调用返回一个Time :: Piece对象,以便可以进行减法并将其与600(10分钟内的秒数)进行比较。要进一步将输出限制为与模式匹配的行,您只需将&& m/pattern/
添加到条件中,或将输出传递给后续流程。