Hora / Data grep por 15 minutos

3

Eu preciso de grep de um tipo específico de linha em um horário específico do log. Você tem alguma ideia?

Este é o meu script de trabalho:

cat *.log |grep -E '2011-06-30 (1[0-1]:[0-1][0-5]|10:16)'| grep -ach '0110 478655 ..  51' * | awk '{SUM += $1} END { print SUM }'

A linha acima está funcionando para 00: 00-00: 16 horas. Eu preciso somar todos os grep resultados para esse tempo específico. Como faço para grep a string:

00:15-00:31, 00:30-00:46, 00:45-01:01 

Note que o tempo também deve ser variável, o que significa que não será sempre 00: 00-01: 01 - existe alguma maneira de fazer isso?

    
por afbr1201 01.07.2011 / 09:45

1 resposta

2

Você pode combinar horários com uma expressão regular, mas não é a melhor ferramenta para o trabalho. Coloque toda a lógica em awk e faça comparações numéricas.

O Awk não possui recursos específicos para manipular datas. O GNU awk oferece mktime e strftime como uma extensão. Para o problema, conforme especificado, você não precisa dessas extensões, mas elas podem ser úteis se seus requisitos se tornarem mais complexos.

O script "working" que você fornece provavelmente não é o que você quis escrever: sua segunda chamada grep tem nomes de arquivos como argumentos ( * ), portanto, não lerá sua entrada padrão. E você não mostra a entrada de amostra também. Então eu não sei quais são suas exigências.

Veja alguns exemplos de código que pressupõem que todas as linhas de log começam com uma data e que você deseja somar os números que aparecem no final das linhas correspondentes em todos os arquivos de log. Passe a data nas variáveis year , month e day e a hora de início em hour e minute ; o snippet procura por entradas de log em um intervalo de 15 minutos que não podem se estender para um dia diferente.

awk -vyear=2011 -vmonth=6 -vday=30 -vhour=0 -vminute=15 -vRS='[-: ]+' '
BEGIN {start = hour * 60 + min; stop = start + 15}
{time = $4 * 60 + $5}
$1==day && $2== month && $3==day && start <= time && time <= stop && $NF ~ /^[0-9]+$/ {
    sum += $NF
}
END {print sum}'
    
por 01.07.2011 / 11:24

Tags