Reputation: 17
Working awk code:
BEGIN {bla}
/patern1/ {userFunction(input1)}
...
/paternN/ {userFunction(inputN)}
END {bla}
Now I try to store paternX
and inputX
using array and use a for loop
Actually tried:
for (i in patern)
$0 ~ /patern[i]/ {userFunction(input[i])}
$ ... awk:38: for (i in patern)
$ ... awk:38: ^ syntax error
Or
$0 ~ /for (i in patern)/ {userFunction(input[i])}
$ ... awk:40: $0 ~ /patern[i]/ {userFunction(input[s])}
$ ... awk:40: ^ syntax error
Simplified example
cat >> inputs << EOF
1
2
3
1
1
EOF
Working
awk '
/1/{print "one"}
/2/{print "two"}' inputs
Upvotes: 0
Views: 42
Reputation: 38990
for
-- and also if
-- is a statement that can only go in the 'action' part of an awk rule, not the 'condition' part; and //
is only for literal patterns (regexps) not variables:
{ for( i in patterns ) if( $0 ~ patterns[i] ) userFunction( inputs[i] ) }
However, since awk array subscripts can be any string, also called 'associative', rather than keep two arrays in sync you can use one:
BEGIN{ pat_inp["pattern1"]="input1"; pat_inp["pattern2"]="input2"; ... }
{ for( i in pat_inp ) if( $0 ~ i ) userFunction( pat_inp[i] ) }
Upvotes: 2