AWK变量问题

时间:2013-04-29 15:56:17

标签: bash awk

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

2 个答案:

答案 0 :(得分:3)

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

$ awk -v AVAR=${MYVAR} '$0~AVAR{getline; print}' file
snm=sahh

答案 1 :(得分:0)

使用AWK变量传递参数几乎总是更清晰;但是,在这种特定情况下,生成的脚本比它需要的要复杂一些 - 而且实际上更容易理解并与其他人沟通。

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

$ awk "/$MYVAR/ {getline; print}" file
snm=sahh
$