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

Dav*_*rks 4 awk

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

例:

a    <-- save this one
b
c    <-- Now that we found c, let's print a
Run Code Online (Sandbox Code Playgroud)

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

/a/ { myvar = $0 }
/c/ { print $myvar $0 }
Run Code Online (Sandbox Code Playgroud)

在梦境中生产:

ac
Run Code Online (Sandbox Code Playgroud)

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

cc
Run Code Online (Sandbox Code Playgroud)

注意:回答"只是打印a,然后c就像这个例子的简化一样工作."真实世界的用例c只需要根据更多条件进行打印,因此需要存储最近看到a机会 a以下c将打印.

gle*_*man 7

工作代码

/a/ { myvar = $0 }
/c/ { print myvar $0 }
Run Code Online (Sandbox Code Playgroud)

可以将其$视为一个运算符,它获取给定字段数的值.

这里myvar保存值"a".在数字上下文中使用时,不以数字开头的字符串被视为值为零.因此,$myvar被视为$"a"$0

一种奇怪的方式来利用这个:

awk '/a/ {myvar = $0} /c/ {print $myvar $1}' <<END
2a
b
c d
END
Run Code Online (Sandbox Code Playgroud)

将输出

dc
Run Code Online (Sandbox Code Playgroud)