【问题标题】:grep logfile for a specific timeframegrep 特定时间范围的日志文件
【发布时间】:2013-03-26 21:23:08
【问题描述】:

我需要从具有以下格式的日志文件中过滤消息:

2013-03-22T11:43:21.817078+01:00  INFO    log msg 1...
...
2013-03-22T11:44:32.817114+01:00  WARNING log msg 2...
...
2013-03-22T11:45:45.817777+01:00  INFO    log msg 3...
...
2013-03-22T11:46:59.547325+01:00  INFO    log msg 4...
...

(其中... 表示“更多消息”)

必须根据时间范围进行过滤。 这是 bash 脚本的一部分,此时代码中的时间范围存储为 $start_time$end_time。例如:

start_time = "2013-03-22T11:45:20"
end_time   = "2013-03-22T11:45:50"

请注意,$start_time$end_time may确切 值可能永远不会出现在日志文件中;然而会有几条消息在时间范围内[$start_time, $end_time]是我正在寻找的。​​p>

现在,我几乎确信我需要一个 Python 脚本来进行过滤,但我宁愿使用 grep(或 awk 或任何其他工具),因为它应该运行得更快(日志文件很大)。

有什么建议吗?

【问题讨论】:

  • 如果您的start_time 是shell 变量,请在为它赋值时删除= 前后的空格。 (end_time 也一样)

标签: python bash awk grep


【解决方案1】:

根据您问题中的日志内容,我认为 awk oneliner 可能会有所帮助:

awk -F'.' -vs="$start_time" -ve="$end_time" '$1>s && $1<e' logfile

注意:这是过滤内容,不包括开始和结束时间。

【讨论】:

    【解决方案2】:
    $ start_time="2013-03-22T11:45:20"
    
    $ end_time="2013-03-22T11:45:50"
    
    $ awk -F'.' '$1>s&&$1<e' s=$start_time e=$end_time file
    2013-03-22T11:45:45.817777+01:00  INFO    log msg 3...
    

    【讨论】:

      猜你喜欢
      • 2013-02-15
      • 2012-11-10
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      相关资源
      最近更新 更多