Любой способ доступа к соответствующим группам в действии?

Я часто оказываюсь в том же матче в действии, что и шаблон, для доступа к некоторой части входной записи, например.

/^Compiled from \"(.*)\"$/ {
    file_name = gensub("^Compiled from \"(.*)\"$", "\\1", "g");
    print file_name;
}

Итак, совпадение регулярного выражения выполняется дважды. Есть ли способ получить доступ к \\1 в действии без повторного сопоставления?

Я пытаюсь как уменьшить на соответствие pattert, так и дополнительный код.

Ответ 1

К сожалению, GAWK не имеет функции переноса вперед sed, которая использует пустой //.

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

Однако вы можете радоваться, так как переменные недавно были изобретены, и они могут использоваться именно для этой цели!

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