Aqui está um pouco de awk para você começar:
awk '/ > /{
split($1,t,":"); time = (t[1]*60+t[2])*60+t[3]
diff = time-lasttime; lasttime = time
event[++i] = diff; window += diff; tod[i] = $1
while(window>=1){
window -= event[1]
for(j=1;j<i;j++){
event[j] = event[j+1]
tod[j] = tod[j+1]
}
i--
}
if(i+1>10) printf "%d events in %f secs at %s\n",i+1,window,tod[i]
} '
Ele mantém (no array event
) todos os timestamps (convertidos em segundos flutuantes) que estão em uma janela de execução de 1 segundo. Quando a janela é excedida por um novo evento, o primeiro evento registrado é removido e todos os eventos mudam um. i
diz quantos eventos existem, sem contar o correspondente ao início da janela, que está sempre no tempo relativo zero. O script imprime quantos eventos estavam na janela quando o número excede 10. Exemplo de saída:
11 events in 0.962827 secs at 14:53:51.262827
O padrão / > /
é para corresponder apenas aos pacotes recebidos. Talvez seja necessário refinar isso para corresponder às linhas que lhe interessam.