|
|
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
|
Время: 23:03.
© OSzone.net 2001-