`
bndis
  • 浏览: 14803 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

awk正则表达式中调用ksh变量

 
阅读更多

  如果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 
分享到:
评论

相关推荐

    grep、sed、awk、perl等对正则表达式的支持的差别

    grep、sed、awk、perl等对正则表达式的支持的差别,大牛总结的,适合高手参考用。

    sed awk正则表达式

    详细介绍sed awk正则表达式

    sed-awk正则表达式

    sed_awk正则表达式

    sed_awk正则表达式

    awk和正则表达式的搭配,能实现任何你需要的功能。

    正则表达式之道.doc

    绝大部分的例子是基于vi中的文本替换命令和grep文件搜索命令来书写的,不过它们都是比较典型的例子,其中的概念可以在sed、awk、perl和其他支持正则表达式的编程语言中使用。你可以看看不同工具中的正则表达式这一节...

    正则表达式使用详解及使用实例

    我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或sed shell程序等。此外,象JavaScript这种客户端的脚本语言也提供了对正则表达式的支持。由此可见,...

    正则全集\正则表达式使用详

    我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或sed shell程序等。此外,象JavaScript这种客户端的脚本语言也提供了对正则表达式的支持。由此可见,...

    sed awk正则表达式.pdf

    关于sed和awk的详细介绍文章 sed和awk各位跑来下载的都熟吧

    专家教您如何在C语言中巧用正则表达式

    如果用户熟悉Linux下的sed、awk、grep或vi,那么对正则表达式这一概念肯定不会陌生。由于它可以极大地简化处理字符串时的复杂度,因此现在已经在许多Linux实用工具中得到了应用。千万不要以为正则表达式只是Perl、...

    什么是正则表达式 (由一些普通字符和一些元字符组成)

    一个正则表达式,就是用某种模式去匹配一类...正则表达式被各种文本编辑软件、类库(例如Rogue Wave的tools.h++)、脚本工具(像awk/grep/sed)广泛的支持,而且像Microsoft的Visual C++这种交互式IDE也开始支持它了。

    unix下的正则表达式

    详细介绍了unix下的正则表达式的各项内容。。

    精通正则表达式(第3版) Mastering.Regular.Expressions

     不过,第1版已经逐渐脱离了时代,必须加以修订,才能适应新的语言和特性,也才能对应正则表达式在互联网世界中越来越重要的地位。第2 版出版于2002年,这一年的里程碑是java.util.regex、Microsoft .NET Framework...

    绝对有用的linux正则表达式案例

    绝对有用的LINUX正则表达式使用,包含awk,sed,cut,tr等使用技巧,希望大家喜欢!

    详解linux正则表达式(基础正则表达式+扩展正则表达式)

    正则表达式应用非常广泛,例如: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 正则表达式 awk 快速入门包含sed 正则表达式

    正则表达式

    本书关注的是一种强大的工具——“正则表达式”。它将教会读者如何使用正则表达式解决各种问题,以及如何充分使用支持正则表达式的工具和语言。许多关于正则表达式的文档都没有介绍这种工具的能力,而本书的目的正是...

    grep awk sed 都有正则表达式个人收藏经典参考书,强烈推荐

    最头疼的是,这些重复部分的语法还各不相同,(比如 grep awk sed 都有正则表达式匹配的功能,但是三者的正则表达式语法就不相同) 最最最头疼的是,每个工具还分 GNU 版和不是 GNU 版,之间的差别也很大, 最最最最...

Global site tag (gtag.js) - Google Analytics