Как я могу использовать только строки из огромного (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-й столбец вашего файла журнала, который является меткой времени, вы можете использовать любое число в соответствии с вашим файлом журнала.