The OpenNET Project / Index page

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

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

"работа с массивами в awk"  
Сообщение от nastr email(??) on 08-Апр-09, 14:07 
Есть скрипт на awk, раньше я использовал просто вывод строк (print), теперь, для дополнительного сравнения строк мне понадобилось использовать массивы.
Подскажите пожалуйста как правильно инициализировать массивы в awk, как правильно заносить в массив значение и как провести сравнение массивов?
Тело скрипта:
awk '{
b = index($0, "error#:");
c = substr($0,index($0,":")+1);
d = substr(j, 1, 10);
f = substr(c, 12, 8);
g = substr($0, b+7);
i = sprintf(strftime("%Y.%m.") sprintf("%02i", strftime("%d")-1));
j = strftime("%Y.%m.%d %H:%M:%S| ", substr(c, 1, 10));
k = strftime("%Y.%m.%d");
l = index(substr(c,1,2), "12");
m = index(substr(c,1,2), "20");
if (b)
{
    if (l || m)
    {
        if (e == k || e == i || d == k || d == i)
        {
            if (l)
            {
                arrey[n]=j g
            }
            else
            {
                arrey[n]=e " " f "| " g
            }
        }
    }
    else
    {
    arrey[o]="    .  .     .  .  | " g
    }
print arrey[n]
    ?????
    {
    print arrey[o]
    }
}
}' $file


Вот что должен делать скрипт:
если файл содержит строки содержащие error#:
{
    если строки начинаются с 12 или 20
    {
            если дата равна сегодняшней или вчерашней дате
        {
            если строка начинается с 12
            {
                        занести строку в массив N
            }
                    else
            {
                        занести строку в массив N
            }
            }
    }
        else
    {
            занести строку в массив O # не содержит информации о дате
    }
print весь масив N

    если второе поле (в данном случае g) строки из массива О не совпадает со вторым полем (g) строки в массива N
    {
        print строку из массива O
    }
}

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

 Оглавление

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


1. "работа с массивами в awk"  
Сообщение от Pahanivo (??) on 08-Апр-09, 21:25 
awk конечно позволяет некий скриптинг как и многоие консольные тулзы - но возмите лучше перл - быстрей, понятней, универсальней - там это все делается как два байта написать да и людей побольше которые захотят пообсуждать код на перле чем скрипты на awk )

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

2. "работа с массивами в awk"  
Сообщение от allez (ok) on 09-Апр-09, 06:39 
>awk конечно позволяет некий скриптинг как и многоие консольные тулзы - но
>возмите лучше перл - быстрей, понятней, универсальней - там это все
>делается как два байта написать да и людей побольше которые захотят
>пообсуждать код на перле чем скрипты на awk )

Ну да, особенно если учесть, что AWK - это скриптовый язык, то было бы несколько странно, если бы он
не позволял "некий скриптинг". :-) Насчет Perl согласен целиком и полностью.

Автору темы: а что мешает вам заглянуть хотя бы в man awk?


Arrays
       Arrays are subscripted with an expression between  square  brackets  ([
       and ]).  If the expression is an expression list (expr, expr ...)  then
       the array subscript is a string consisting of the concatenation of  the
       (string) value of each expression, separated by the value of the SUBSEP
       variable.  This facility  is  used  to  simulate  multiply  dimensioned
       arrays.  For example:
              i = "A"; j = "B"; k = "C"
              x[i, j, k] = "hello, world\n"
       assigns the string "hello, world\n" to the element of the array x which
       is indexed by the string "A\034B\034C".  All arrays in AWK are associa‐
       tive, i.e. indexed by string values.
       The  special  operator  in may be used to test if an array has an index
       consisting of a particular value.
              if (val in array)
                   print array[val]
       If the array has multiple subscripts, use (i, j) in array.
       The in construct may also be used in a for loop to iterate over all the
       elements of an array.
       An  element  may  be  deleted from an array using the delete statement.
       The delete statement may also be used to delete the entire contents  of
       an array, just by specifying the array name without a subscript.

>Подскажите пожалуйста как правильно инициализировать массивы в awk, как правильно заносить в массив значение и как провести сравнение массивов?

Все это с элементами массивов делается так же, как и с обычными переменными.

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

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

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




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

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