2013-03-26 65 views
1

我需要来过滤消息出它具有以下格式的日志文件的:用于特定时间范围的grep日志文件

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]时间范围内将有几条消息这是我正在寻找的。

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

有什么建议吗?

+0

如果你的'start_time'是shell变量,当你给它赋值的时候,在'='之前和之后移除这些空格。 ('end_time'相同) – Kent 2013-03-26 13:18:22

回答

1

根据你的问题的日志内容,我觉得一个awk oneliner可以帮助:

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

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

+0

谢谢@Kent!它现在有效! – 2013-03-26 13:27:49

+0

很棒.....然后。 – Kent 2013-03-26 13:29:17

0
$ 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... 
相关问题