como grep para um período de tempo específico em um log

4

Trabalhamos com arquivos de log que possuem entradas de linha que começam com um formato de data / hora como este:

20150408 13:29:28 <rest of text>

O que eu preciso fazer para grep em um período?

Diga como todas as linhas que começam em 20150408 13:29:28 e terminam em 20150408 17:55:02 ?

A grep seria a ferramenta para o trabalho ou outra coisa seria melhor como sed ?

    
por user53029 09.04.2015 / 14:45

2 respostas

3

Certamente, a tarefa pode ser feita por sed

sed '/20150408 13:29:28/,/20150408 17:55:02/! d' log_files

mas se as linhas não tiverem o script exato de 20150408 13:29:28 , nada será impresso e, se não tiver o arquivo 20150408 17:55:02 exato, imprimirá todas as linhas até o final. Portanto, é melhor usar a data de comparação por script:

limit1=$(date -d "20150408 13:29:28" +"%s")
limit2=$(date -d "20150408 17:55:02" +"%s")
while read -r logdate logtime logline
do
    logsec=$(date -d "$logdate $logtime" +"%s")
    if [ $limit1 -le $logsec -a $limit2 -ge $logsec ]
    then
        echo $logdate $logtime $logline
    fi
done < log_files
    
por 09.04.2015 / 14:57
3

Acho que awk poderia ajudar:

awk 'BEGIN { sd = "20150408T13:29:28"; ed = "20150408T17:55:02"; } $1 "T" $2 >= sd && $1 "T" $2 <= ed' log
    
por 09.04.2015 / 15:18