awk 引用shell变量, 变量的作用域

http://blog.sina.com.cn/s/blog_63092e670100r4th.html

1. ''  单引号截断,注意:如果变量的值有空格的话,必须要加双引号""(参见上面的链接),否则空格会导致 cmd空格option空格params

2.ENVRION["varName"]

3.-v传递参数

GOOD:

http://www.cnblogs.com/chengmo/archive/2010/10/03/1841753.html

1. 格式如:awk ‘{action}’  变量名=变量值   ,这样传入变量可以在action中获得值,但不能在BEGIN{}中引用

var1="hahah"

echo |awk 'BEGIN{print "Begin:v1="v1} {print "ActionBody:v1="v1}' v1="$var1"

     输出结果

    Begin:v1=

    ActionBody:v1=hahaha

2.格式如:awk –v 变量名=变量值 [–v 变量2=值2 …] 'BEGIN{action}’  注意:用-v 传入变量可以在3种类型的action 中都可以获得到,但顺序必须要在  action前面。

echo |awk -v v1="haha" 'BEGIN{print "Begin:v1="v1} {print "ActionBody:v1="v1}'

格式如:awk ‘{action}’  变量名=变量值   ,这样传入变量,可以在action中获得值。 注意:变量名与值放到’{action}’后面。

[chengmo@localhost ~]$ echo | awk  'BEGIN{print test}' test="$test"         

这种变量在:BEGIN的action不能获得。

awk  -f "query.awk" idnums=10 test.dat

必须要在文件名前面

 

格式如:awk –v 变量名=变量值 [–v 变量2=值2 …] 'BEGIN{action}’ 

注意:用-v 传入变量可以在3中类型的action 中都可以获得到,但顺序在  action前面。

awk  -v idnums=10 -f "query.awk"  test.dat

 

1.单引号 双引号的区别

var1="hello"

awk 'script'    => 会把awk scrpit 原封不动的传递给AWK解释器

awk '{print $var1}'   =>ERROR,   $var1是shell变量,无法直接引用

awk "script"  => 先把awk script解析成 String 形式的 脚本(包括引用shell变量), 再传递给AWK解释器

awk "{print $var1}"   =>OK,   先把$var1是替换成shell变量的值,解析的结果"print hello" 再传递给AWK解释器

awk '{print $SHELL-VAR}'    SHELL-VAR的值来自shell变量

测试如下:

>index=2

>echo $index  ##输出是2

>echo "a b c d" | awk {'print $index'}   ERROR

var是shell变量,而awk是Linux中独立于shell的一个工具。在awk中如果要解析shell变量,需要将变量拿到awk的作用域外面来,即,先关闭awk的单引号,引用变量 后再次打开。

摘自 http://zhidao.baidu.com/question/273992965.html

>echo "a b c d" | awk {'print $'$index'}'   

猜你喜欢

转载自ama2000.iteye.com/blog/1266377