awk吧 关注:104贴子:293
  • 4回复贴,共1

awk中使用shell变量的问题

只看楼主收藏回复

awk中需要使用shell中的变量来进行判断,但是使用-v 进行传递的时候,发现根本不起作用
#!/bin/bash
i=22
echo hello world | awk -v k="$i" '{if(k>100)\{print $1}else{print $2}}'
不管怎么改变i的值得到的总是hello;
而且如果
i=22
awk -v k="$i" 'BEGIN{print k}'
就可以打印出i的值,去掉BEGIN就会出现错误,无法打印,这是什么原因呢?哪里弄错了啊?求教


1楼2013-06-10 12:41回复
    #!/bin/bash
    i=22
    echo hello world | awk -v k="$i" '{if(k>100){print $1}else{print $2}print "----"k"----"}'
    然后打出:[xxxx@spaces ~]$ ./t.sh
    world
    ----22----
    这个没有问题的,当然可能与服务器版本有关系,我这是center OS 5.4的linux版本,当然前面那个最好是 echo "hello world" 加上引号,不然在不同的版本下会有所区别


    IP属地:北京2楼2013-06-13 09:57
    回复
      楼主是不是多打了一个反斜杠"\" 在if条件后面


      IP属地:天津来自Android客户端3楼2013-06-13 23:23
      回复
        因为没有输入文件啊,BEGIN的话是直接输出结果的,你的echo的文件没输入给awk


        IP属地:天津4楼2013-08-02 09:10
        回复
          #!/bin/bash
          i=22
          echo hello world | awk -v k=$i '{
          if(k > 100){
          print $1
          }else{
          print $2
          }
          }'


          5楼2015-10-31 21:56
          回复