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}'