2013-03-26 63 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... 
相關問題