Chinaunix首页 | 论坛 | 博客
  • 博客访问: 205638
  • 博文数量: 87
  • 博客积分: 192
  • 博客等级: 入伍新兵
  • 技术积分: 455
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-14 07:44
文章分类

全部博文(87)

文章存档

2013年(1)

2012年(86)

分类:

2012-05-27 18:02:25

原文地址:awk之变量篇 作者:Eagle_615

1.数值变量和字符串变量
数值常量可以为整数,浮点数,或科学计数法,字符串括在双引号
1.1初始化与强制类型转换
          未经初始化的变量的值是0或者"",究竟是哪个取决于他们被使用时的上下文。
          强制将字符串转换为数字:
          name + 0
          将数字转换成字符串的方法:
          number " "
         所有由split函数创建的字段或数组元素都被视为字符串,除非他们只包含数字值,如果某个字段或者数组元素为空,他的值就是空串,空行也可以视为空串
1.2 用户自定义变量
    用户自定义的变量名可以由字母、数字和下划线组成,但是不能以数字开头,awk的变量不用声明其类型,可从表达式的上下文推导出他的数据类型,如果变量未被初始化,awk会将字符串变量初始化为空,将数值变量初始化为0,必要时,awk会将字符型变量转换为数值型变量;或者反向转换变量的赋值运算符分别有:
       运算符    含义    等效表达
       =      a=5    a=5
       +=      a=a+5   a+=5
       -=      a=a-5   a-=5
       *=      a=a*5   a*=5
       /=      a=a/5   a/=5
       %=      a=a%5   a%5=5
       ^=      a=a^5   a^=5
1.3 递增和递减运算符
1.4 命令行上的用户自定义变量
  可在变量行上变量赋值,然后将其传递给awk脚本。
  awk -v:提供-v允许在BEGIN语句中处理命令行变量,从命令行传递的而每个变量前面都必须加一个-v选项
1.5字段变量
     字段变量类似用户自定义变量,唯一的区别就是他们引用了字段,新的字段可以通过赋值来创建,字段变量引用的字段如果没有值,则被赋值为空串。字段的值发生变化是,awk会以OFS作为字段非歌赋重新计算$0变量的值,字段数目通常被限制在100以内
 
1.6内置变量
  内置变量都为大写,可用于表达式,也可以被重置。
变量名   含义
ARGC    命令行参数的数目
ARGIND   命令行中当前文件在ARGV内的索引(仅用于gawk)
ARGV    命令行参数构成的数组
CONVFMT   数字转换格式,默认为%.6g(仅用于gawk)
ENVIRON   包含当前shell环境变量值的数组
ERRNO    当使用getline函数进行读操作或者使用close函数,因重定向操作而产生的系
FIELDWIDTHS  再分隔固定宽度的列表时,使用空白而不是FS进行分隔的字段宽度列表
FILENAME  当前输入的文件名称
FNS         当前文件的记录数
FS     输入字段分隔符,默认为空格
IGNORECASE 在增则表达式和字符串匹配中不区分大小写,(仅用于gawk)
NF      当前记录中的字段数
NR     目前的记录数
OFMT    数字的输出格式
OFS     输出字段分隔符
ORS     输出记录分隔符
RLENGTH   match函数匹配到的字符串的字符
RS     输入记录分隔符
RSTART   match函数匹配到的字符串的偏移量
RT     记录终结符,对于匹配到的字符或者RS指定的regex,gawk将RT设置到输入文本
SUBSEP   数组下标分隔符
1.6 BEGIN模式
     begin模式后面跟了一个操作块。awk必须在对输入文件进行任何处理之前先执行该操作块,实际上不需要任何输入文件,也能对begin块进行测试,因为awk要在执行完BEGIN操作块后才开始读取输入,BEGIN操作常常被用于修改内置变量(OFS,RS,FS等)的值,为用户自定义变量赋初值和打印输出的页眉和标题。
    BEGIN的操作块中有两条或两条以上语句,必须用分号分隔他们或者每行只写一条语句(在shell命令提示符下输入时,必须用反斜杠来转义换行符)
    awk 'BEGIN{FS=":"; OFS="\"; ors="\N\N"}{print $1,$2,$3} file
阅读(3408) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~