转 http://blog.chinaunix.net/uid-24536726-id-20209.html
保留记录用
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="NN"}{print $1,$2,$3} file
阅读(1409) | 评论(0) | 转发(0) |