Проще говоря, вы должны сделать следующее:
for file in f1 f2 f3 f4; do
for time in {10..20}:{00..59}; do
sum=$(awk -v t="${time}" -F";" '($0~"^"t){sum+=$7}END{print sum}' "$file"
echo "$file $sum $time"
done
done
Это, однако, очень медленно, так как вы будете открывать каждый файл несколько раз при поиске определенного временного ключа.
Я считаю, что вы после этого:
awk 'function print_summary( h,m,key) {
for (h=10;h<=20;++h) {
for (m=0;m<60;++m) {
key=sprintf("%0.2d:%0.2d",h,m)
print fname, sum[key]+0, key
}
}
}
BEGIN{FS=";"}
(FNR==1){if(NR>1) print_summary(); delete sum; fname=FILENAME}
!/^..:..:../{next}
{ key=substr($0,1,5) }
{ sum[key]+=$7 }
END { print_summary() }' file1 file2 file3 ...
Этот метод пропустит пустые файлы, но сообщит именно то, что ожидается.