您的位置:首页 > 运维架构 > Shell

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

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


方法/步骤

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

在awk中使用bash传递的变量

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

[root@none ~]# name=sni7

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

sni7

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都是系统变量,系统变量是需要前缀的,但是自定义变量不需要任何前缀。

同时为了区分自定义变量和普通文本,在输出文本的时候需要使用双引号将文本引用起来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: