Como grep httpd error_log dentro de um intervalo de tempo?

3

Como posso usar apenas linhas de um enorme (120 GB) httpd error_log com base em um intervalo de tempo, por exemplo:

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

Obrigado!

    
por ohho 16.11.2011 / 05:19

2 respostas

3

Você provavelmente terá que fazer alguns detalhamentos, eu começaria obtendo o intervalo de datas:

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

A maneira mais eficiente que posso pensar, mas não o fiz, é encontrar os bytes iniciais e finais do seu período e obter isso; (que aparentemente é possível com o grep), mas eu não sei como obter um intervalo de bytes de um arquivo - provavelmente leva algumas habilidades de awk

Edit: Como essa foi uma pergunta interessante, fiz mais algumas pesquisas:

Você pode obter o primeiro deslocamento de byte:

 # 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#>
    
por 16.11.2011 / 05:43
0

awk '$ 3 > "11:30:00" & & $ 3 < "13:30:00" 'log_file | menos

onde $ 3 é a terceira coluna do seu arquivo de log, que é o timestamp, você pode usar qualquer número de acordo com o seu arquivo de log.

    
por 25.10.2012 / 17:07