Назад | Перейти на главную страницу

Как grep httpd error_log в пределах временного диапазона?

Как я могу использовать только строки из огромного (120 ГБ) httpd error_log на основе временного диапазона, скажем:

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#>

awk '$ 3> "11:30:00" && $ 3 <"13:30:00"' log_file | Меньше

где $ 3 - это 3-й столбец вашего файла журнала, который является меткой времени, вы можете использовать любое число в соответствии с вашим файлом журнала.