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 ~ .." = пишет ошибку. Что я делаю не так? Понимаю что где-то в мелочи ошибся, но сколько я не рылся в инете - ничего толкового не нашел :(

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.

На сайте действует частичное премодерирование - после публикации некоторые сообщения от анонимов могут автоматически скрываться ботом. После проверки модератором ошибочно скрытые сообщения раскрываются. Для ускорения раскрытия можно воспользоваться ссылкой "Сообщить модератору", указав в качестве причины обращения "скрыто по ошибке".



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

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