10 minutos = 600 segundos, então decidi somar o segundo campo de cada 600 linhas e imprimir esse valor dividido por 600, quando cada linha 600-é alcançada.
awk -F, '
NR % 600 == 1 {
start = $1
}
NR % 600 == 0 {
printf("%s - %s => %f\n", start, $1, avg / 600)
avg = 0
}
{
avg += $2
}
' input.txt
Resultado
09:00:00 - 09:09:59 => 49.807600
09:10:00 - 09:19:59 => 50.171900
09:20:00 - 09:29:59 => 47.775433
09:30:00 - 09:39:59 => 48.605350
09:40:00 - 09:49:59 => 49.591117
...
13:20:00 - 13:29:59 => 50.347733
13:30:00 - 13:39:59 => 50.321833
13:40:00 - 13:49:59 => 49.923333
13:50:00 - 13:59:59 => 48.644683
14:00:00 - 14:09:59 => 49.957433
...
16:00:00 - 16:09:59 => 50.333633
16:10:00 - 16:19:59 => 51.799317
16:20:00 - 16:29:59 => 50.931450
16:30:00 - 16:39:59 => 50.734167
16:40:00 - 16:49:59 => 49.857383
16:50:00 - 16:59:59 => 50.433733
Para gerar input.txt
, criei dois programas, use o que você gosta. O segundo programa é mais rápido.
Primeiro
date -f <(seq -f '@%g' 21600 50399) '+%H:%M:%S' |
awk '{
printf("%s,%.2f\n", $0, rand() * 100)
}'
Segundo
awk '
BEGIN {
for(i = 9; i < 17; i++) {
for(j = 0; j < 60; j++) {
for(k = 0; k < 60; k++) {
printf("%02d:%02d:%02d,%.2f\n", i, j, k, rand() * 100)
}
}
}
}'