Есть скрипт на 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 конечно позволяет некий скриптинг как и многоие консольные тулзы - но возмите лучше перл - быстрей, понятней, универсальней - там это все делается как два байта написать да и людей побольше которые захотят пообсуждать код на перле чем скрипты на awk )
>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, как правильно заносить в массив значение и как провести сравнение массивов?Все это с элементами массивов делается так же, как и с обычными переменными.