URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8419
[ Назад ]

Исходное сообщение
"Вопрос по массивам в awk"

Отправлено BigEye , 02-Сен-09 15:44 
BEGIN {
  patterns[1] = "/pattern1/"
  patterns[2] = "/pattern1/"
  ...
}
{
  for(i in patterns) {
   if($0 ~ patterns[i]) {
     //some logic
     //...
   }
  }
}

Почему-то в условии значение переменной не воспринимается как паттерн и условия не выполняется. Как правильно будет сделать? Смысл этого в том, что есть много паттернов, которые будут меняться, хотелось бы их вынести в отдельную переменную, что-то типа настроек. Логики ниже много, привел укороченный вариант, чисто для разъяснения вопроса.


Содержание

Сообщения в этом обсуждении
"Вопрос по массивам в awk"
Отправлено Pahanivo , 02-Сен-09 16:10 
>[оверквотинг удален]
>     //...
>   }
>  }
>}
>
>Почему-то в условии значение переменной не воспринимается как паттерн и условия не
>выполняется. Как правильно будет сделать? Смысл этого в том, что есть
>много паттернов, которые будут меняться, хотелось бы их вынести в отдельную
>переменную, что-то типа настроек. Логики ниже много, привел укороченный вариант, чисто
>для разъяснения вопроса.

а не проще все зделать на перле?


"Вопрос по массивам в awk"
Отправлено BigEye , 02-Сен-09 16:15 
>а не проще все зделать на перле?

вариант. 1,5гига парсится за 6мин. как думаете на перле как будет? я погуглил как-то так в порядке убывания скорости:
sed
awk
perl


"Вопрос по массивам в awk"
Отправлено Pahanivo , 02-Сен-09 17:23 
>>а не проще все зделать на перле?
>
>вариант. 1,5гига парсится за 6мин. как думаете на перле как будет? я
>погуглил как-то так в порядке убывания скорости:
>sed
>awk
>perl

1) чем мерял? )))
2) метод "тупого перебора" он и в basic'е всего лишь метод тупого перебора и ничего более.
о какой скорости тут можно рассуждать мне вообще непонятно ))
3) по поводу перла: парсить разные паттерны и регексы намного проще и удобнее - ибо язык изначально под это заточен


"Вопрос по массивам в awk"
Отправлено Андрей , 02-Сен-09 18:48 
IMHO, то что Вы написали больше похоже на perl, чем на awk.
на awk это будет
/pattern1/ { some logic 1 } /pattern2/ { other logig } ... { all other }

"Вопрос по массивам в awk"
Отправлено Andrey Mitrofanov , 02-Сен-09 20:10 
>  patterns[1] = "/pattern1/"
>  patterns[2] = "/pattern1/"

Заменяем на:
patterns[1] = "pattern1"
patterns[2] = "pattern-кстати-2"
;) Ага?