PDA

Показать полную графическую версию : Подсчет времени по определённому событию


Armsinglom
08-03-2021, 11:26
Добрый день! помогите пожалуйста с задачкой:
Есть лог типа:
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
Сами-то пытались?

greg zakharov
13-06-2021, 18:34
Решение "в лоб".
#!/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




© OSzone.net 2001-2012