awk: any way to access the matched groups in action?

awk

Solution

Unfortunately, GAWK, doesn't have the carry-forward feature of `sed` which uses an empty `//`.

sed '/\(patt\)ern/ {s//new\1/}' inputfile

However, you can rejoice since variables have recently been invented and they can be used for just this purpose!

BEGIN {
    pattern = "^Compiled from \"(.*)\"$"
}
$0 ~ pattern {
    file_name = gensub(pattern, "\\1", "");
    print file_name;
}

Problem

I often find myself doing the same match in the action as the pattern, to access some part of the input record, e.g. ``` /^Compiled from \"(.*)\"$/ { file_name = gensub("^Compiled from \"(.*)\"$", "\\1", "g"); print file_name; } ``` So the regexp matching is done twice. Is there any way I can access `\\1` in the action without matching again? I am trying to both reduce on pattert matching and extra code.

Original source

Related problems