AWK - 如何从匹配的正则表达式中分配一个变量的值?

时间:2012-09-30 06:56:37

标签: variables awk

虽然我有 awk脚本

/regex2/{
var = $1}

/regex1/{
print var}

我在输入文件上执行了

regex1

This should be assigned as variable regex2

我没有打印输出。所需的输出是:“打印出来”。

我可能会考虑使用BEGIN:

BEGIN{
/regex2/
var = $1}

/regex1/{
print var}

但显然BEGIN无法容纳正则表达式匹配功能。有什么建议吗?

2 个答案:

答案 0 :(得分:4)

这将达到预期的效果:

awk '/regex2/ { print $1 }'

否则,您需要两次读取文件并执行以下操作。它会将/regex2/的最后一次出现存储在var中。重新阅读文件后,每次var出现时都会打印/regex1/。请注意,您将在输出中获得一个空行,并在换行符中显示关键字“This”:

awk 'FNR==NR && /regex2/ { var = $1; next } /regex1/ { print var }' file.txt{,}

答案 1 :(得分:0)

通常这种事情是用旗帜完成的:

/regex1/ { f = 1 }
f && /regex2/ { var = $1; f = 0 }