【问题标题】:How to store a string (line) in an AWK variable如何将字符串(行)存储在 AWK 变量中
【发布时间】:2014-07-27 01:16:55
【问题描述】:

编写一个 AWK 脚本,我想将我找到的一行存储在一个变量中,然后,如果我还匹配另一行,则打印出该原始行。

例子:

a    <-- save this one
b
c    <-- Now that we found c, let's print a

伪,希望它完全像这样工作,代码:

/a/ { myvar = $0 }
/c/ { print $myvar $0 }

在梦境中产生:

ac

我一厢情愿的伪代码的实际,迷幻的结果:

cc

注意:回答“只打印a,然后打印c 是作弊的,因为这将适用于简化此示例。实际用例要求c 仅根据进一步的条件打印,因此需要将最近看到的a 存储在机会上,随后的c 将被打印出来。

【问题讨论】:

    标签: awk


    【解决方案1】:

    工作代码

    /a/ { myvar = $0 }
    /c/ { print myvar $0 }
    

    $ 视为一个运算符,它获取给定的值 字段编号。

    这里myvar 保存值“a”。在数字上下文中,不以数字开头的字符串被认为具有零值。因此,$myvar 被视为$"a",即$0

    利用这一点的奇怪方法:

    awk '/a/ {myvar = $0} /c/ {print $myvar $1}' <<END
    2a
    b
    c d
    END
    

    会输出

    dc
    

    【讨论】:

    • +1 将$ 视为字段数组的名称的另一种常见方式。它在句法上有点分崩离析,但在功能上它不是一个糟糕的类比。
    【解决方案2】:

    去掉myvar前面的美元符号

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多