The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
awk (подсчет сообщений за минуту) ответ где-то рядом.., !*! onorua, 16-Дек-08, 18:46  [смотреть все]
Есть лог, в формате:
=======
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 ~ .." = пишет ошибку. Что я делаю не так? Понимаю что где-то в мелочи ошибся, но сколько я не рылся в инете - ничего толкового не нашел :(




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру