Linux服务器管理、bash脚本编写过程中经常用到awk进行数据分析,awk变量使用过程中又经常因为出现歧义或者定义不规范,导致无法得到预期的结果。本文用最简洁的例子说明awk变量如何正确的定义和使用。
方法/步骤
-
在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参数进行变量定义
-
在awk中使用bash传递的变量
类似自定义变量,在脚本中可以轻易的用-v参数将bash的变量传递给awk,如下所示:
[root@none ~]# name=sni7
[root@none ~]# awk -v var=${name} 'BEGIN{print var}'
sni7
-
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都是系统变量,系统变量是需要前缀的,但是自定义变量不需要任何前缀。
同时为了区分自定义变量和普通文本,在输出文本的时候需要使用双引号将文本引用起来。