#!/usr/bin/awk -f
# NOTE: This example takes only CPU load as input. Use it like this:
#
# cat log.txt | awk '$1 == "1923" {print $9}' | awk -f rolling-average.awk
BEGIN {
freq = 10; sum = 0; max = 0
}
{
i = NR % freq
if (NR > freq)
sum -= data[i]
sum += (data[i] = $1)
}
NR >= freq {
avg = sum/freq
print "average for " NR-freq+1 ".." NR " = " avg
if (avg > max) {
max = avg
pos = NR
}
}
END {
print "peak " max " at " pos-freq+1 ".." pos
}
Editar: Corrigido um possível erro e removido a filtragem de linha (o que tornava as coisas mais complexas do que o necessário) - agora ele precisa receber apenas números de carga da CPU. Mas pelo menos calcula a média corretamente agora.