Подсчет времени по определённому событию

Ответить
 • Просмотры: 5
Аватара пользователя
Armsinglom

Подсчет времени по определённому событию

Сообщение Armsinglom »

Добрый день! помогите пожалуйста с задачкой:

Есть лог типа:



Код:

Код: Выделить всё

Mar  2 18:18:44 kiosk-1: 2021-03-02 18:18:44.346431826 I fr_prim [JAM/drivers.cpp:1038] run() Устройство в работе.
Mar  2 18:19:35 kiosk-1: 2021-03-02 18:19:35.934731823 I fr_prim [JAM/drivers.cpp:1038] run() Устройство в работе.
Mar  2 18:20:52 kiosk-1: 2021-03-02 18:20:52.946473447 E fr_prim [JAM/drivers.cpp:2058] run() Фатальная ошибка.
Mar  2 18:25:23 kiosk-1: 2021-03-02 18:25:23.347744464 E fr_prim [JAM/drivers.cpp:2058] run() Фатальная ошибка.
Mar  2 18:35:56 kiosk-1: 2021-03-02 18:35:56.767657337 E fr_prim [JAM/drivers.cpp:2058] run() Фатальная ошибка.
Mar  2 18:40:12 kiosk-1: 2021-03-02 18:40:12.947768633 E fr_prim [JAM/drivers.cpp:2058] run() Фатальная ошибка.
Mar  2 18:45:11 kiosk-1: 2021-03-02 18:45:11.125152521 I fr_prim [JAM/drivers.cpp:1038] run() Устройство в работе.
Mar  2 18:56:49 kiosk-1: 2021-03-02 18:56:49.232363215 I fr_prim [JAM/drivers.cpp:1038] run() Устройство в работе.

Необходимо:

1) первый запрос должен посчитать кол-во событий "E fr_prim". Одно событие - это первая строка "E fr_prim" и до первой строки "I fr_prim" и т.д. до конца лога.

2) Второй запрос должен посчитать сколько суммарно по времени продлились события "E fr_prim".





По возможности задачку хотелось бы решить с помощью grep, sed, awk и т.д.
Аватара пользователя
greg zakharov

Re: Подсчет времени по определённому событию

Сообщение greg zakharov »

Решение "в лоб".



Код:

Код: Выделить всё

#!/usr/bin/env bash
x=`awk -F'[. ]' '$9 == "E" {
  cmd = "date -d \"" $6 " " $7 "\" +%s"
  cmd | getline ts
  close(cmd)
  printf ":%d", ts
  next
} NR > 1 {print ""}{p=$9}' msg.txt | awk '{
  system("echo \"("$NF"-"$2") / 60\" | bc 2>/dev/null")
}' FS=\:`
echo "Number of events: `sed -n '$=' 
Ответить

Вернуться в «Программирование в *nix»