Есть лог, в формате:
=======
sub_system_1 :ddMM hhmmSS:I:.*Processing durations:(0.462 [0.000,0.000] ms + 0.810 ms + 0.931 [0.000,18446744072535611.616] ms) = 2.203 ms. Num Context[2]
=======Нужно организовать:
1. подсчет количества строк (в логе есть и другие строки)
2. количества по подсистемам (sub_system_{1,2,3,4,5}),
3. минимальное, максимальное и среднее значение durations в данном (случае это 2.203)
4. Все эти красоты нужно организовать поминутно. В логе сообщений за секунду - много. Переходим минуту - принтим. Переходим минуту - принтим.
Делаю вот так:
BEGIN {
m_min_x = 100000000000;
}
END {
print m_max_x
print m_c
print m_min_x
print m_x
}
$0 ~ /^sub_system_.* duration:/ {
if (sub (/^.*duration:\[/,""))
{
duration = $1
c_x=c_x+duration;
c_c=c_c+1;
if (duration<c_min_x) {
c_min_x=duration
}
if (duration>c_max_x) {
c_max_x=duration
}
}
Как организовать подсчет поминутно?
Пробовал как-то так:
BEGIN {
m_min_x = 100000000000;
date = "0000 0000"
}
END {
print m_max_x
print m_c
print m_min_x
print m_x
}
function get_time() {
FS=":"
if (substr($2,1,9) == date)
return 1
else {
date = substr($2,1,9)
return 0
}
}
{
if (get_time() == 1){
$0 ~ /^sub_system_.* duration:/ {
if (sub (/^.*duration:\[/,""))
{
duration = $1
c_x=c_x+duration;
c_c=c_c+1;
if (duration<c_min_x) {
c_min_x=duration
}
if (duration>c_max_x) {
c_max_x=duration
}
}
else {
print m_max_x
print m_c
print m_min_x
print m_x
}
}
Пишет ошибку:
awk: ./statistics.awk: line 26: syntax error at or near {
awk: ./statistics.awk: line 39: syntax error at or near else
Как я не пытался сделать - если ипользую if перед "$0 ~ .." = пишет ошибку. Что я делаю не так? Понимаю что где-то в мелочи ошибся, но сколько я не рылся в инете - ничего толкового не нашел :(