Wednesday, February 27, 2019

regex - awk extract multiple groups from each line



How do I perform action on all matching groups when the pattern matches multiple times in a line?



To illustrate, I want to search for /Hello! (\d+)/ and use the numbers, for example, print them out or sum them, so for input



abcHello! 200 300 Hello! Hello! 400z3
ads

Hello! 0


If I decided to print them out, I'd expect the output of



200
400
0

Answer




This is a simple syntax, and every awk (nawk, mawk, gawk, etc) can use this.



{
while (match($0, /Hello! [0-9]+/)) {
pattern = substr($0, RSTART, RLENGTH);
sub(/Hello! /, "", pattern);
print pattern;
$0 = substr($0, RSTART + RLENGTH);
}
}


No comments:

Post a Comment

plot explanation - Why did Peaches' mom hang on the tree? - Movies & TV

In the middle of the movie Ice Age: Continental Drift Peaches' mom asked Peaches to go to sleep. Then, she hung on the tree. This parti...