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

如何在AWK变量中存储字符串(行),awk,Awk,在编写AWK脚本时,我希望将在变量中找到的一行存储起来,只有在以后,如果我还匹配了另一行,才打印出原始行 例如: a <-- save this one b c <-- Now that we found c, let's print a 在梦境中产生: ac 我一厢情愿的psudo代码的实际、迷幻、结果: cc 注意:回答是作弊“只需打印a,然后再打印c,这样可以简化本例。现实世界的用例要求仅根据进一步的条件打印c,因此需要存储最近看到的a,以便打印后续c。工作代

在编写AWK脚本时,我希望将在变量中找到的一行存储起来,只有在以后,如果我还匹配了另一行,才打印出原始行

例如:

a    <-- save this one
b
c    <-- Now that we found c, let's print a
在梦境中产生:

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

cc
注意:回答是作弊“只需打印
a
,然后再打印
c
,这样可以简化本例。现实世界的用例要求仅根据进一步的条件打印
c
,因此需要存储最近看到的
a
,以便打印后续
c

工作代码

/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

删除
myvar

+1前面的美元符号另一种常见的方法是将
$
看作字段数组的名称。它在句法上有点分崩离析,但在功能上,这是一个不错的类比。
awk '/a/ {myvar = $0} /c/ {print $myvar $1}' <<END
2a
b
c d
END
dc