The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"awk (подсчет сообщений за минуту) ответ где-то рядом.."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

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

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "awk (подсчет сообщений за минуту) ответ где-то рядом.."  
Сообщение от angra (ok) on 16-Дек-08, 19:07 
В качестве языка программирования вы указали PHP, в теме написали про awk, задачу проще всего решить на перле, код привели несоответствующий поставленной задаче. Вы вообще трезвы?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "awk (подсчет сообщений за минуту) ответ где-то рядом.."  
Сообщение от Pahanivo email(??) on 17-Дек-08, 12:49 
>В качестве языка программирования вы указали PHP, в теме написали про awk,
>задачу проще всего решить на перле, код привели несоответствующий поставленной задаче.
>Вы вообще трезвы?

Это не PHP, это похоже на скрипт awk.
+1 - однозначно перл
но еще проще задача решается выгрузкойопределенных полей в mysql с последующим примитивным запросом с произвольно настраиваемой групировкой

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "awk (подсчет сообщений за минуту) ответ где-то рядом.."  
Сообщение от vic (??) on 16-Дек-08, 19:54 
оставьте минимальный кусок кода показывающий ошибку (ну с if)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "awk (подсчет сообщений за минуту) ответ где-то рядом.."  
Сообщение от phpcoder email(??) on 17-Дек-08, 14:46 
[...]
> if (get_time() == 1){
>            
>    $0 ~ /^sub_system_.* duration:/ {

Ну так надо же типа такого:

if ($0 ~ /^sub_system_.* duration:/) {


А awk для этой задачи как раз, кстати.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "подотчёт сообщений за минуту в секунду"  
Сообщение от Andrey Mitrofanov on 17-Дек-08, 15:42 
>Ну так надо же типа такого:
>if ($0 ~ /^sub_system_.* duration:/) {

А потом эти
http:/openforum/vsluhforumID9/7729.html#1
студенты
http:/openforum/vsluhforumID9/7700.html#17
идут работать
http:/openforum/vsluhforumID9/7762.html#8
.

Всё честно, к обоюдному удовлетворению -- "начальство довольно", им заплата, нам "пасибы". Жись прикрасна!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




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

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