Esse é um trabalho típico para perl
:
Com o Tempo :: Peça 1,17 e acima ( perl
5,12 e acima):
perl -MTime::Piece -lne '
BEGIN{$threshold = (localtime) - 10}
if (/\[(.*?)\] ".*?" \d+ \d+ (\d+)/) {
$d = Time::Piece->strptime($1, "%d/%b/%Y:%H:%M:%S %z");
if ($d >= $threshold) {$t += $2; $n++}
}
END{print $t/$n if $n}' your-file.log
As versões de Time :: Piece 1.15 e inferiores não suportavam %z
, portanto, supondo que o fuso horário do chamador corresponde ao do arquivo de log, você poderia fazer:
perl -MTime::Piece -lne '
BEGIN{$threshold = (localtime) - 10}
if (/\[([^]]*:\d+).*?".*?" \d+ \d+ (\d+)/) {
$d = Time::Piece->strptime($1, "%d/%b/%Y:%H:%M:%S");
if ($d->datetime ge $threshold->datetime) {$t += $2; $n++}
}
END{print $t/$n if $n}' your-file.log