- 浏览: 14803 次
- 性别:
- 来自: 成都
最新评论
如果ksh中定义了变量pcname,而在嵌入ksh中的awk程序中又要使用这个环境变量,并且用它在正则表达式中,该如何用它呢?
最简单的方法就是: #!/bin/ksh pcname="ap201" nawk '/'"$pcname"'/{print $2}' $FILE 更多方法,参见下面转载的《AWK 使用 Shell 变量》一文: 最近闲着没事,想写个Shell脚本,其中用到了 AWK。想在AWK中读取/设置Shell脚本中定义的变量,搜索些资源,总结了一些东东。
读取变量
在通过如下方式读取Shell变量
1> awk -v varName=varValue '...' ...
2> awk '...{print "'"${USER}"'"}' ...
此种方式可以访问系统环境变量(如USER等),和自定义Shell变量。若这些变量中没有空格及其他特殊字符,则可以少写两个双引号:awk '...{print "'${USER}"}' ...
3> awk '...{print ENVIRON["USER"]}...' ...
但是这种方法只能访问系统变量
设置变量
在AWK中尚未找到设置Shell变量的方法,因为像上面的读取的方法中,一旦awk开始执行,这些环境变量都是一个副本,无论处理多少条记录,不管主Shell中如何变化,所引用的这些变量值都保持不变。而且,通过下面的实验可以看出来,在AWK中执行system函数调用命令是另起一个Shell线程,所以无法依靠system来设置外部环境变量。
如果你的AWK只打印一条结果的话,可以使用如下方式在shell环境中设置变量
myVar="`echo | awk '{print "AA\nBB\nCC"}'`"
注意,这种方式在awk打印多行情况下会将回车用空格替代后赋值。
实验过程如下:
$ vi tmp.sh
// 编辑内容如下
#!/bin/bash echo echo "SHELL VERSION : ${SHELL} ${BASH_VERSION}" echo "AWK VERSION : `awk -W version | sed -n '1p'`" echo myVar="AAA BBB CCC DDD" echo "IN SHELL : PID=$" echo "IN SHELL : \${myVar}=\"${myVar}\"" echo echo | awk -v var1="${myVar}" '{ print "IN AWK : how to print single quote : " "'"'"'" print "No." NR print "IN AWK : -v : var1=\"" var1 "\"" print "IN AWK : get : ENVIRON[\"USER\"]=\"" ENVIRON["USER"] "\"" print "IN AWK : get : ENVIRON[\"myVar\"]=\"" ENVIRON["myVar"] "\"" print "IN AWK : get : ${USER} =\"" "'"${USER}"'" "\"" print "IN AWK : get : ${myVar}=\"" "'"${myVar}"'" "\"" print system("echo \"IN AWK : system() : PID=$\"") }' myVar="`echo | awk '{print "AA\nBB\nCC"}'`" #\n is replaced by space character echo ${myVar}
$ . tmp.sh
//输出结果如下
SHELL VERSION : /bin/bash 3.2.25(1)-release AWK VERSION : GNU Awk 3.1.5 IN SHELL : PID=10627 IN SHELL : ${myVar}="AAA BBB CCC DDD" IN AWK : how to print single quote : ' No.1 IN AWK : -v : var1="AAA BBB CCC DDD" IN AWK : get : ENVIRON["USER"]="zhangll" IN AWK : get : ENVIRON["myVar"]="" IN AWK : get : ${USER} ="zhangll" IN AWK : get : ${myVar}="AAA BBB CCC DDD" IN AWK : system() : PID=17468 AA BB CC
发表评论
-
字符串编辑距离算法 动态规划
2012-07-06 09:51 900http://hxraid.iteye.com/b ... -
Android 正则表达式学习
2012-07-06 09:37 864Java正则表达式学习: 因为正则表达式是一个很庞杂 ... -
Javascript 使用对象(1)- 简单型 ( 含属性,方法)
2012-07-06 09:30 536定义属性: Skin={ 'data':{ ' ... -
JS操作HTML 我的笔记1
2012-07-05 20:45 6251. document.getElementBy ... -
核心Swing组件(六)
2012-07-03 13:42 607JButton组件是可以被 ... -
关于Flex 的渲染器的总结
2012-07-02 10:25 581关键字: Flex. 渲染 ... -
flex笔记--安装与项目建立
2012-07-02 10:25 555使用java做后台,采用Eclipse插件式安装 操 ... -
Flex权威指南3学习笔记之一------界面知识(一)
2012-07-02 10:24 572最近在学习flex,正 ... -
Building a custom Flex preloader
2012-07-02 10:24 594http://www.adobe.com/devnet/f ... -
采用数据库为Flex Tree组件的提供数据-Java与LCDS
2012-07-01 09:44 621Java与LCDS 俺在这里使用Adobe LiveCyc ... -
java Flex as3 数据类型对应关系表
2012-07-01 09:44 825LCDS只能与J2EE的服务端进行通信,目前只是Actio ... -
java ArrayList 转成Flex ArrayCollection
2012-07-01 09:43 5981. server package com.east. ... -
Flex TXT文件导入
2012-07-01 09:43 633在上一篇文章中,我们做了一个文件上传、导入组件,其实就是一 ... -
[转载]关于VS05里checkboxlist用JS获取不到value值的解决方法
2012-06-30 17:59 674页面上有个服务器控件checkboxlist,想要获取选中 ... -
win32 API创建tooltip的版本不匹配问题解决方法
2012-06-30 17:59 1271在visual studio 2005以上版本中使用API ... -
IBM JDK下访问SSL/HTTPS时候ClassNotFoundException解决方法
2012-06-30 17:59 1616项目代码会使用HTTPS,之前一直在Sun JDK+Tom ... -
python windows mysqldb安装错误解决方法
2012-06-30 17:59 1064首先会出现如下错误: serverKey = _wi ... -
infobright创建表时指定存储目录无效的解决方法
2012-06-30 17:59 641infobright是一个基于 ...
相关推荐
grep、sed、awk、perl等对正则表达式的支持的差别,大牛总结的,适合高手参考用。
详细介绍sed awk正则表达式
sed_awk正则表达式
awk和正则表达式的搭配,能实现任何你需要的功能。
绝大部分的例子是基于vi中的文本替换命令和grep文件搜索命令来书写的,不过它们都是比较典型的例子,其中的概念可以在sed、awk、perl和其他支持正则表达式的编程语言中使用。你可以看看不同工具中的正则表达式这一节...
我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或sed shell程序等。此外,象JavaScript这种客户端的脚本语言也提供了对正则表达式的支持。由此可见,...
我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或sed shell程序等。此外,象JavaScript这种客户端的脚本语言也提供了对正则表达式的支持。由此可见,...
关于sed和awk的详细介绍文章 sed和awk各位跑来下载的都熟吧
如果用户熟悉Linux下的sed、awk、grep或vi,那么对正则表达式这一概念肯定不会陌生。由于它可以极大地简化处理字符串时的复杂度,因此现在已经在许多Linux实用工具中得到了应用。千万不要以为正则表达式只是Perl、...
一个正则表达式,就是用某种模式去匹配一类...正则表达式被各种文本编辑软件、类库(例如Rogue Wave的tools.h++)、脚本工具(像awk/grep/sed)广泛的支持,而且像Microsoft的Visual C++这种交互式IDE也开始支持它了。
详细介绍了unix下的正则表达式的各项内容。。
不过,第1版已经逐渐脱离了时代,必须加以修订,才能适应新的语言和特性,也才能对应正则表达式在互联网世界中越来越重要的地位。第2 版出版于2002年,这一年的里程碑是java.util.regex、Microsoft .NET Framework...
绝对有用的LINUX正则表达式使用,包含awk,sed,cut,tr等使用技巧,希望大家喜欢!
正则表达式应用非常广泛,例如:php,Python,java等,但在linux中最常用的正则表达式的命令就是grep(egrep),sed,awk等,换句话 说linux三剑客要想能工作的更高效,就一定离不开正则表达式的配合。 1、什么是正则...
一个正则表达式,就是用某种模式去匹配一类...正则表达式被各种文本编辑软件、类库(例如Rogue Wave的tools.h++)、脚本工具(像awk/grep/sed)广泛的支持,而且像Microsoft的Visual C++这种交互式IDE也开始支持它了。
正则表达式--强大的文本匹配工具,每个工程师都需要掌握的必备技能。这个文档看过一小时,算是基本入门了。 前提是有良好的Linux基础,对grep awk sed 要熟练。
awk 快速入门包含sed 正则表达式 awk 快速入门包含sed 正则表达式
本书关注的是一种强大的工具——“正则表达式”。它将教会读者如何使用正则表达式解决各种问题,以及如何充分使用支持正则表达式的工具和语言。许多关于正则表达式的文档都没有介绍这种工具的能力,而本书的目的正是...
最头疼的是,这些重复部分的语法还各不相同,(比如 grep awk sed 都有正则表达式匹配的功能,但是三者的正则表达式语法就不相同) 最最最头疼的是,每个工具还分 GNU 版和不是 GNU 版,之间的差别也很大, 最最最最...