=
对引用的文做了格式修改和字符串修正。
增加了自己的例子.
实际应用:
比如我的脚本如下:
awk -F"," '{if($4 > _max_exe_time_) print $4","$0}' _max_exe_time_=$_max_exe_time_ My-File.txt
=
awk引用外部变量
from:
http://www.cnblogs.com/mydomain/archive/2012/09/24/2699467.html
https://blog.csdn.net/wangweiran1/article/details/38272797
一、用awk 有以下几种方法去调用变量:
1. awk '{print a, b}' a=111 b=222 yourfile
注意, 变量位置要在 file 名之前, 否则就不能调用。
还有, 于BEGIN{}中是不能调用这些的variable. 要用之后所讲的第二种方法才可解决.
2. awk -v a=111 -v b=222 '{print a,b}' yourfile
注意, 对每一个变量加一个 -v 作传递。
3. awk '{print " ' "$LOGNAME" ' "}' yourfile (这种方法比较雷,一般不用了)
如果想调用environment variable, 要用以上的方式调用, 方法是:
" ' " $LOGNAME " ' "
原文:
awk如何引用外部变量
http://hi.baidu.com/icqncvjhgmbbsyq/item/02ef096ac1d49c94c5d2495a
二、进一步解释
第3种方法为什么要加两个双引号和一个单引号?
$ str=Hello
$ awk 'BEGIN{print " '$str' "}'
Hello
看上去是双引号套单引号,其实真正的原因为:
这是shell的功能,shell对单引号和双引号,按从左到右的顺序成对匹配
awk命令用单引号引起来,就是防止shell对其中内容进行解释
awk '{print " '$str' "}' file
实际上就是2部分
1:awk '{print " '
2:'"}'
即awk对2个单引号内的命令起作用。
至于$str就被shell正常解释为变量str的值。
所以,如果str=hello,则经解释后成为,awk {print "hello"}file
而如果str=hello world,则解释时,在解释前一部分:awk {print " 后,在替换了变量后,变成了hello world,当shell读到hello和world中间的空格时,认为这是IFS,于是,把他们放在于不同的域中,这样解释成了:
awk BEGIN{print "hello
world"}两部分。
按照上面的解释,就可以这么来修改,比如
a)$ awk 'BEGIN{print " ' "$a" ' "}'
或者
b)$ awk "BEGIN{print \"$a\"}"
或者
c)$ awk BEGIN\{print\""$a"\"\}
对于a,解释成为:
awk BEGIN{print "hello world"} #因为$a在替换后,还在“”中包括中,所以当成了一个字符串处理。
三、总结
awk怎么说也是要运行在shell环境中的。所以,写在awk中的命令,要先经过shell解析后,再交由awk来解释和执行。
原文:
awk引用外部变量
http://hi.baidu.com/liheng_2009/item/6466a4c0e087222447d5c0c8
以下两个链接给了更多的讨论:
http://www.linuxsir.org/bbs/thread121709.html
http://bbs.chinaunix.net/thread-1381166-1-1.html
=
=
=
相关推荐
1.3 AWK的调用方式......................................................................................................................6 1.4 AWK的语法:..................................................
目录 前言 显示和操作文件的实用程序 ...将外部变量值传递给awk 4.2.3.用getline读取行 4.2.4.用样式对awk的行进行过滤 4.2.5.设置字段定界符 4.2.6.从awk中读取命令输出 4.2.7.在awk中使用循环 后续
使用export命令传递一个变量到一个内嵌awk的脚本中 11-19. 使用getopts命令来读取传递给脚本的选项/参数. 11-20. "Including"一个数据文件 11-21. 一个没什么用的,source自身的脚本 11-22. exec的效果 11-23. 一个...
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. 数字...
1.10 外部变量与作用域 第2章 类型、运算符与表达式 2.1 变量名 2.2 数据类型及长度 2.3 常量 2.4 声明 2.5 算术运算符 2.6 关系运算符与逻辑运算符 2.7 类型转换 2.8 自增运算符与自减运算符 2.9 按位...
Window编程环境介绍295 14.2数据检索加工工具awk296 14.2.1awk基本描述296 14.2.2awk中的记录和字段297 14.2.3awk中使用的模式298 14.2.4awk中的操作语句300 14.3程序管理器300 14.3.1源代码控制系统SCCS300 14.3.2...
1.9 如何生成“半全局变量”,就是那种只能被部分源文件中的部分函数访问的变量? 存储类型 1.10 同一个静态(static)函数或变量的所有声明都必需包含static存储类型吗? 1.11 extern在函数声明中是什么意思? ...
o 3.10 我的编译器在结构中留下了空洞, 这导致空间浪费而且无法与外部数据文件进行 "二进制" 读写。能否关掉填充, 或者控制结构域的对齐方式? o 3.11 为什么 sizeof 返回的值大于结构的期望值, 是不是尾部有填充? ...
前言 ............................................................................................................3.6.4.引用 ..................................................................................
1.9 如何生成“半全局变量”,就是那种只能被部分源文件中的部分函数访问的变量? 5 存储类型 6 1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗? 6 1.11 extern在函数声明中是什么...
1.8 函数只定义了一次, 调用了一次, 但编译器提示非法重定义了。. . 4 1.9 main() 的正确定义是什么? void main() 正确吗? . . . . . . . . . 4 1.10 对于没有初始化的变量的初始值可以作怎样的假定?如果一个全 ...