Как использовать awk для чтения данных между всеми частыми временными интервалами

У меня есть файл журнала в следующем формате

[30/Jan/2015:10:10:30 +0000] 12.30.30.204 xff=- reqId=[-] status_check len=- GET /api/getstatus HTTP/1.1 mi=- ec=- 200 425 [30/Jan/2015:10:11:00 +0000] 12.30.30.204 xff=- reqId=[-] status_check len=- GET /api/getstatus HTTP/1.1 mi=- ec=- 200 261 [30/Jan/2015:10:11:29 +0000] 12.30.30.204 xff=- reqId=[-] status_check len=- GET /api/getstatus HTTP/1.1 mi=- ec=- 200 232 [30/Jan/2015:10:12:00 +0000] 12.30.30.204 xff=- reqId=[-] status_check len=- GET /api/getstatus HTTP/1.1 mi=- ec=- 200 315 [30/Jan/2015:10:12:29 +0000] 12.30.30.204 xff=- reqId=[-] status_check len=- GET /api/getstatus HTTP/1.1 mi=- ec=- 200 221 [30/Jan/2015:10:12:57 +0000] 12.30.30.182 xff=- reqId=[-] status_check len=- GET /api/getstatus HTTP/1.1 mi=- ec=- 200 218 

Каждая строка в этом файле журнала имеет время отклика в последнем поле и имеет отметку времени в первом поле. Есть ли способ в awk прочитать среднее время отклика за все определенные промежутки времени? Например, вычисление времени отклика avg каждые пять минут.

Я пробовал следующий способ, который статический способ сделать это и даст только среднее значение одного временного интервала.

 $ grep "30/Jan/2015:10:1[0-4]" mylog.log | awk '{resp+=$NF;cnt++;}END{print "Avg:"int(resp/cnt)}' 

Но мне нужно сделать это для всего файла за все 5 минут. Даже если я зациклирую команду, как я могу динамически передать дату в команду? Поскольку файл журнала изменяется каждый раз и даты в нем.

Или есть лучший альтернативный способ сделать это, кроме awk ? Пожалуйста, предложите.

One Solution collect form web for “Как использовать awk для чтения данных между всеми частыми временными интервалами”

Вначале это может быть:

 awk -F"[][ ]*" -v it=300 '{ sub(":"," ",$2) gsub("/"," ",$2) "date +%s -d \""$2"\""|getline d if (df>it) { f=d if (NR!=1) print s/ns=n="" } n++ s+=$NF }' log.file 
  • -F"[][ ]*" используется как F ields S eparator для разметки квадратных скобок дополнительно
  • -v it=300 заданная переменная (интервал в секундах)
  • sub,gsub удаляет символы из поля, чтобы подготовить его к формату команды date
  • date преобразовать поле во второе (из EPOCH)
  • |getline d помещается выше в переменную d
  • Что означает отметка времени «00:00:00» в kern.log?
  • Проверка отметки времени Unix с использованием BASH
  • Как переименовать файлы и преобразовать datestamp из DD-MM-YYYY в YYYY-MM-DD?
  • Заменить символ алфавитом в зависимости от позиции в строке
  • Как отображать время sadf в формате epoch
  • Какой может быть вариант изменения измененного времени файла в будущем?
  • Как определить, действительно ли cp -u скопировал файл?
  • Использует ли `git archive` неправильную временную метку файла?
  • Извлечь дату создания и время изменения файла в Sunos
  • Универсальная альтернативная альтернатива non-bash `time`?
  • Когда был открыт последний файл?
  • Linux и Unix - лучшая ОС в мире.