awk怎样自定义变量以及常用bash传递的变量

来源:互联网 发布:linux难学吗 编辑:程序博客网 时间:2024/06/07 06:27

Linux服务器管理、bash脚本编写过程中经常用到awk进行数据分析,awk变量使用过程中又经常因为出现歧义或者定义不规范,导致无法得到预期的结果。本文用最简洁的例子说明awk变量如何正确的定义和使用。

方法/步骤

  1. 1

    在awk中自定义变量

    通过-v参数便可以自定义变量传递给awk使用,如果是BEGIN中调用的话,变量的定义必须紧邻awk命令,如下所示:

    [root@none ~]# awk -v var='bianliang' 'BEGIN{print var}'

    bianliang

    如果用:[root@none ~]# awk 'BEGIN{print var}' -v var='bianliang'

    显示的结果将是空,因为变量定义在了BEGIN使用以后。

    为了养成一个好的脚本编写习惯,建议所有的变量都使用第一种习惯,紧邻awk命令加-v参数进行变量定义

  2. 2

    在awk中使用bash传递的变量

    类似自定义变量,在脚本中可以轻易的用-v参数将bash的变量传递给awk,如下所示:

    [root@none ~]# name=sni7

    [root@none ~]# awk  -v var=${name} 'BEGIN{print var}'

    sni7


  3. 3

    awk中定义多个变量

    在定义每个变量的时候,都必须重新加入-v参数,如:

    # awk -v year=2013 -v month=04 '$2 ~ year"/"month"/[0123]" {print $2,$3,$NF}' ceb2013.lst

    就是说定义了year、month两个变量。

    以上awk命令的含义是:匹配ceb2013.lst中,第二列为“2013/04/**”(即日期是2013年4月份某天)这样格式的内容,将第二列、第三列和最后一列打印输出。注意,$2、$3、$NF都是系统变量,系统变量是需要前缀的,但是自定义变量不需要任何前缀。

    同时为了区分自定义变量和普通文本,在输出文本的时候需要使用双引号将文本引用起来。

原创粉丝点击