2013-09-17 6 views
1

Я не знаю, как передать регулярное выражение в качестве аргумента функции.Как передать регулярное выражение функции в AWK

Если я передать строку, это нормально,

Я следующий файл AWK,

#!/usr/bin/awk -f 

function find(name){ 
    for(i=0;i<NF;i++)if($(i+1)~name)print $(i+1) 
} 

{ 
    find("mysql") 
}  

я что-то вроде

$ ./fct.awk <(echo "$str") 

Это работает нормально.

Но когда я звоню в файле AWK,

{ 
    find(/mysql/) 
} 

Это не работает.

Что я делаю неправильно?

Спасибо,

Eric J.

ответ

3

вы не можете (не должны) пройти регулярное выражение константы к определенному пользователю функции. вы должны использовать динамическое регулярное выражение в этом случае. как find("mysql")

если вы find(/mysql/), что делает AWK сделать: find($0~/mysql/) так пройти 0 или 1 к вашей find(..) функции.

этот вопрос для подробно.

awk variable assignment statement explanation needed

также http://www.gnu.org/software/gawk/manual/gawk.html#Using-Constant-Regexps

раздел: 6.1.2 Использование регулярных выражений Константы

3
warning: regexp constant for parameter #1 yields boolean value 

Регулярное выражение получает оценку (соответствие с $0), прежде чем он передается функции. Вы должны использовать строки.

Примечание: убедитесь, что вы делаете правильное экранирование: http://www.gnu.org/software/gawk/manual/gawk.html#Computed-Regexps

Смежные вопросы