【问题标题】:AWK -- How to assign a variable's value from matching regex which comes later?AWK——如何从后面出现的匹配正则表达式中分配变量的值?
【发布时间】:2012-09-21 11:28:45
【问题描述】:

虽然我有这个 awk 脚本

/regex2/{
var = $1}

/regex1/{
print var}

我在输入文件上执行的:

regex1

This should be assigned as variable regex2

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

然后我可能会考虑使用 BEGIN:

BEGIN{
/regex2/
var = $1}

/regex1/{
print var}

但显然 BEGIN 不能适应正则表达式匹配功能。对此有什么建议吗?

【问题讨论】:

    标签: variables awk


    【解决方案1】:

    这将达到预期的结果:

    awk '/regex2/ { print $1 }'
    

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

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

    【讨论】:

      【解决方案2】:

      通常这种事情是通过一个标志来完成的:

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

      【讨论】:

        猜你喜欢
        • 2013-01-20
        • 1970-01-01
        • 2020-04-06
        • 2010-11-17
        • 1970-01-01
        • 1970-01-01
        • 2015-07-06
        • 2014-09-15
        • 1970-01-01
        相关资源
        最近更新 更多