0

awk 中的变量不返回结果。

我正在尝试使用 awk 从文件中获取匹配值的下一行。没有变量它工作正常。谢谢。

$ cat file
name=bobk
snm=sahh
emp=bklc
jdate=879
$
$ awk '/name/{getline; print}' file
snm=sahh   ---------> Got the result
$
$ export MYVAR=name
$
$ echo $MYVAR
name
$
$  awk -v AVAR=${MYVAR} '/AVAR/{getline; print}' file
$   ---------> No result
4

2 回答 2

3

您需要~对整行使用正则表达式匹配运算符,$0因为/AVAR/匹配字符串AVAR而不是变量AVAR

$ awk -v AVAR=${MYVAR} '$0~AVAR{getline; print}' file
snm=sahh
于 2013-04-29T15:59:27.750 回答
0

使用 AWK 变量传递参数几乎总是更清晰的意图;但是,在这种特定情况下,生成的脚本比它需要的要复杂一些——并且稍微打破规则实际上可能更容易理解和与其他人交流。

通过使用双引号来转义脚本,无需使用额外的 AWK 变量。那,如果我们将 shell 变量放在 / 中,则不需要 {}:

$ awk "/$MYVAR/ {getline; print}" file
snm=sahh
$
于 2015-10-23T23:49:20.720 回答