zoukankan      html  css  js  c++  java
  • awk引用外部变量

    一、用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:'"}'

    awk2个单引号内的命令起作用。

    至于$str就被shell正常解释为变量str的值。

    所以,如果str=hello,则经解释后成为,awk {print "hello"}file

    而如果str=hello world,则解释时,在解释前一部分:awk {print " 后,在替换了变量后,变成了hello world,当shell读到helloworld中间的空格时,认为这是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

  • 相关阅读:
    攻防世界WEB新手区第一题
    攻防世界WEB新手区第四题
    12月14
    12月12
    12月13
    centos关机重启命令
    解决docker容器内没有ip addr | ifconfig | ping命令
    Docker + Redis5.0.9集群搭建,3主3从(分片 + 高可用 + 负载均衡)
    docker创建自定义网络,容器内部使用容器名相互ping通,配置不同网段互通
    docker常用命令
  • 原文地址:https://www.cnblogs.com/mydomain/p/2699467.html
Copyright © 2011-2022 走看看