Linux

如何在一個時間範圍內grep httpd error_log?

  • October 25, 2012

error_log我如何才能根據時間範圍僅從巨大的(120GB)httpd 中 grep 行,例如:

from 2011-11-15 11:30 pm
to   2011-11-16 01:30 am

謝謝!

您可能需要進行一些深入研究,我將從獲取日期範圍開始:

grep -e "2011\-11\-[15-16] " error_log > filtered
grep -v -e "2011\-11\-15 [0-10]:" | grep -v -e "2011\-11\-15 11:[0-29]" > filtered
grep -v -e "2011\-11\-16 [2-23]:" | grep -v -e "2011\-11\-16 01:[31-59]" > filtered

cat filtered

我能想到但還沒有做到的最有效的方法是找到日期範圍的開始和結束字節並得到它;(這顯然可以使用 grep)但我不知道如何從文件中獲取一系列字節 - 可能需要一些 awk 技能

編輯:因為這是一個有趣的問題 - 我做了更多的探勘:

您可以通過執行以下操作獲得第一個字節偏移量:

# Get first byte offset, leftmost number is the offset...
grep -m 1 -b "2011-11-15 11:3" error_log
# Get last byte offset
grep -m 1 -b "2011-11-16 01:3" error_log

#(Subtract first number from last number to get byte length) Then do:

dd if=error_log of=filtered bs=c skip=<first number> count=<last_byte#-first_byte#>

引用自:https://serverfault.com/questions/331372