awk patern поиск всего элемента в массиве - PullRequest
0 голосов
/ 09 января 2020

Рабочий код awk:

BEGIN {bla}
/patern1/ {userFunction(input1)} 
...                              
/paternN/ {userFunction(inputN)} 
END {bla}

Теперь я пытаюсь сохранить paternX и inputX с использованием массива и использовать для l oop

На самом деле попытался:

for (i in patern)
    $0 ~ /patern[i]/ {userFunction(input[i])}

$ ... awk:38: for (i in patern)
$ ... awk:38: ^ syntax error

Или

$0 ~ /for (i in patern)/ {userFunction(input[i])}

$ ... awk:40:         $0 ~ /patern[i]/ {userFunction(input[s])}
$ ... awk:40:                          ^ syntax error

Упрощенный пример

cat >> inputs << EOF
1
2
3
1
1
EOF

Рабочий

awk '
/1/{print "one"}
/2/{print "two"}' inputs

1 Ответ

2 голосов
/ 09 января 2020

for - а также if - это оператор, который может только go в части действия действия правила awk, но не в части условия; и // только для литеральных шаблонов (регулярных выражений), а не переменных:

{ for( i in patterns ) if( $0 ~ patterns[i] ) userFunction( inputs[i] ) }

Однако, поскольку индексы массива awk могут быть любой строкой, также называемой «ассоциативной», вместо того, чтобы сохранять два массива в син c вы можете использовать один:

BEGIN{ pat_inp["pattern1"]="input1"; pat_inp["pattern2"]="input2"; ... }
{ for( i in pat_inp ) if( $0 ~ i ) userFunction( pat_inp[i] ) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...