The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
работа с массивами в awk, !*! nastr, 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
    }
}

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

    • работа с массивами в awk, !*! allez, 06:39 , 09-Апр-09 (2)
      >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, как правильно заносить в массив значение и как провести сравнение массивов?

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




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

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