如何在AWK变量中存储字符串(行)

时间:2014-06-05 21:28:58

标签: awk

写一个AWK脚本,我想存储一个我在变量中找到的行,并且只有在稍后,如果我也匹配另一行,则打印出该原始行。

示例:

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

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

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

在梦境中产生:

ac

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

cc

注意:回答“只是打印a,然后c,这样做可以简化这个例子。真实世界的用例只需要打印c根据更多条件,因此需要将最近看到的a存储在机会上以下c

2 个答案:

答案 0 :(得分:6)

工作代码

/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

前面的美元符号