Grep

在大型日誌文件中搜尋和過濾文本

  • October 11, 2013

我使用 tail、head 和 grep 命令來搜尋日誌文件。大多數時候,除了使用管道之外,這 3 個命令的組合可以完成工作。但是,我有許多設備每隔幾秒鐘就會報告一次的日誌。所以這個日誌非常大。但報告的模式是相同的:

Oct 10 11:58:50 Received Packet from [xxx.xx.xxx.xx:xxxx]: 0xD 0xD 0xD 
Oct 10 11:58:50 Unit ID: 1111

在上面的範例中,它顯示 UDP 數據包已發送到特定單元 id 的套接字伺服器。

現在有時我想通過查詢日誌來查看該單元在特定時間範圍內的數據包資訊。

Oct 10 11:58:50 Received Packet from [xxx.xx.xxx.xx:xxxx]: 0xD 0xD 0xD 
Oct 10 11:58:50 Unit ID: 1111

... // A bunch of other units reporting including unit id 1111

Oct 10 23:58:50 Received Packet from [xxx.xx.xxx.xx:xxxx]: 0x28 0x28 0x28 
Oct 10 23:58:50 Unit ID: 1111

所以在上面的例子中,我只想在 11:58 和 23:58 的時間範圍內顯示 Unit ID: 1111 的日誌輸出。所以可能的結果可能是這樣的:

Oct 10 11:58:50 Received Packet from [xxx.xx.xxx.xx:xxxx]: 0xD 0xD 0xD 
Oct 10 11:58:50 Unit ID: 1111

Oct 10 12:55:11 Received Packet from [xxx.xx.xxx.xx:xxxx]: 0x28 0xD 0x28 
Oct 10 12:55:11 Unit ID: 1111

Oct 10 15:33:50 Received Packet from [xxx.xx.xxx.xx:xxxx]: 0x33 0xD 0x11 
Oct 10 15:33:50 Unit ID: 1111

Oct 10 23:58:50 Received Packet from [xxx.xx.xxx.xx:xxxx]: 0x28 0x28 0x28 
Oct 10 23:58:50 Unit ID: 1111

請注意,結果僅顯示單元 ID:1111 資訊,而不顯示其他單元。

現在使用這樣的問題:

tail -n 10000 | grep -B20 -A20 "Oct 10 23:58:50 Unit ID: 1111" 

是不是會顯示很多東西,而不僅僅是我需要的東西。

awk '$3 >= "11:58" && $3 <= "23:58" && /Unit ID: 1111/{print l"\n"$0};{l=$0}'

引用自:https://unix.stackexchange.com/questions/94464