Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование в *nix (http://forum.oszone.net/forumdisplay.php?f=35)
-   -   Подсчет времени по определённому событию (http://forum.oszone.net/showthread.php?t=348170)

Armsinglom 08-03-2021 11:26 2952009

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

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 и т.д.

DJ Mogarych 10-04-2021 22:49 2955474

Сами-то пытались?

greg zakharov 13-06-2021 18:34 2960179

Решение "в лоб".
Код:

#!/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 '$=' <<< $x`  Events durations:" $x



Время: 07:54.

Время: 07:54.
© OSzone.net 2001-