2013-04-29 53 views
0

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 

回答

3

你需要使用正则表达式匹配运算符~对整条生产线$0/AVAR/是匹配的字符串AVAR不是变量AVAR

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

非常感谢解决方案。有用。 – Sourcecode 2013-04-29 18:57:50

0

使用AWK变量来传递参数几乎总是清洁剂的意图;然而,在这种特定情况下,由此产生的脚本比它需要的复杂一点 - 并且稍微打破规则实际上可能更容易理解并与其他人交流。

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

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