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
答案 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
$