`

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'}'   

 

 

 

 

分享到:
评论

相关推荐

    Shell脚本专家指南

    第7章 非直接引用变量 7.1 用非直接变量监控日志文件 7.2 主监控循环 第8章 shell进程树 8.1 用数组实现进程树 8.2 用非直接变量实现进程树 8.3 用Bourneshell实现进程树 第9章 数据重定向 9.1 避免错误 9.2 普通...

    CentOS.5系统管理-part1

    4.9.2 Shell变量的作用域 4.9.3 环境变量 4.9.4 用户工作环境 第5章 Shell脚本编程 5.1 Shell脚本简介 5.1.1 什么是Shell脚本 5.1.2 Shell脚本中的成分 5.1.3 Shell脚本的建立与执行 5.1.4 Shell脚本的编码规范 5.2 ...

    Linux高级bash编程

    使用export命令传递一个变量到一个内嵌awk的脚本中 11-19. 使用getopts命令来读取传递给脚本的选项/参数. 11-20. "Including"一个数据文件 11-21. 一个没什么用的,source自身的脚本 11-22. exec的效果 11-23. 一个...

    Advanced Bash-Scripting Guide <>

    5.1. 引用变量 5.2. 转义(\) 6. 退出和退出状态 7. Tests 7.1. Test 结构 7.2. 文件测试操作 7.3. 其他比较操作 7.4. 嵌套的if/then 条件test 7.5. 检查你的test 知识 8. 操作符和相关的主题 8.1. 操作符 8.2. 数字...

    UNIX操作系统教程 张红光

    Window及其他实用程序292 14.1X-Window292 14.1.1X-Window的特征292 14.1.2X-Window的工作方式293 14.1.3X-Window的组成部件294 14.1.4X-Window编程环境介绍295 14.2数据检索加工工具awk296 14.2.1awk基本描述296 ...

    Perl 实例精解(第三版).pdf

    4.1.2 作用域和包 4.1.3 命名规范 4.1.4 赋值语句 4.1.5 引号规则 4.2 标量、数组和散列 4.2.1 标量变量 4.2.2 数组 4.2.3 散列 4.3 从STDIN读取 4.3.1 把输入赋值给标量变量 4.3.2 ...

    宋劲彬的嵌入式C语言一站式编程

    4. 全局变量、局部变量和作用域 4. 分支语句 1. if语句 2. if/else语句 3. 布尔代数 4. switch语句 5. 深入理解函数 1. return语句 2. 增量式开发 3. 递归 6. 循环语句 1. while语句 2. do/while语句 3. for语句 4. ...

    LINUX操作系统(电子教案,参考答案)

    7.3.5 awk内置变量 143 7.3.6 awk的字符函数 144 7.3.7 数组 144 7.3.8 控制流和循环 145 小结 145 习题七 145 一、思考题 145 二、选择题 149 三、上机操作 149 第8章 进程管理 150 8.1 进程管理的应用 150 8.2 ...

    RED HAT LINUX 6大全

    11.7 配置DNS服务器主域 215 11.7.1 添加本地域解析 215 11.7.2 添加虚拟域解析 217 11.8 授权委托 218 11.8.1 在sylvia上添加 subdomain. domain.cxm的授权 218 11.8.2 测试subdomain.domain.cxm本 地域分解 219 ...

    Bash新手指南

    shell 的作用 ...............................................................................................2 1.1.2. shell 类型...........................................................................

Global site tag (gtag.js) - Google Analytics