grep最后10分钟错误日志

时间:2015-04-12 08:30:21

标签: shell grep

我有以下格式,

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的日期和时间

任何建议

2 个答案:

答案 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/添加到条件中,或将输出传递给后续流程。