第七章 gawk功能:gawk编程
7.1.1 数字和字符串常量
   
初始化和类型强制  在awk中,变量不需要定义就可以直接使用,使用一个变量就是对变量的定义。变量的类型可以试数字、字符串,或者两者都有。在赋值的时候,等号又变表达式的类型就是变量的类型。
    根据使用的不同,未初始化的变量的值为0或者空白字符串“”
    强制字符串转换为数字:
    强制数字转换为字符串:
    所有split函数建立的域和数组元素都被认为是字符串变量,除非它值包含数字值,如果域或者数组元素为空(null),那么它们的值就是null。一个空行也被看作是一个空的字符串。
7.1.2 自定义变量
    自定义变量由字母、数字和下划线组成,但是不能以数字开头。awk中的变量不需要声明。awk根据表达式中变量的内容来确定变量的类型。如果变量没有初始 化,awk就初始化字符串变量的值为NULL,数值变量值为0。如果有必要,awk能把数字变量转换为字符串变量,或者相反。变量通过复制符号被赋值。
    递增和递减操作符
   
命令行自定义变量  可以在命令行中给变量赋值,然后再把这个变量传输给awk脚本。
    例如,# awk -F: -f awkscript month=4 year=2000 filename     注:变量定义要在filename前面
    -v选项(awk)。awk的-v选项允许BEGIN语句处理命令行参数。对于每一个从命令行传输的参数,他们前面都必须有-v选项
   
域变量 域变量的用法类似于自定义变量,只是域变量引用的域不同。新的域可以通过赋值建立。一个域如果已被参考但是还没有赋值,它的值就是空字符串。一旦与的值改变了,就是用当前作为域分隔符的OSF的值重新计算$0变量。通常域的总数限制在100以内。
    例如,# awk '$4 == "CA" { $4 = "California"; print}' filename
    如果第四个域的值($4)等于CA,awk就把第四个域赋值为 "California"。注意,一定要有双引号,否则系统就会误认为是自定义变量而赋值为NULL.
   
内建变量  内建变量的名字是由大写字母组成。它们事先被赋值并可以在表达式中使用。 
                      
                    内建变量清单
    变量名                      变量内容
     ARGC                       命令行参数的数量
     ARGIND                     命令行正在处理的当前文件的AGV的索引(仅在gawk中有效)
     ARGV                       命令行参数数组
     CONVFMT                    转换数字格式(仅在gawk中有效),默认是%.6g
     ENVIRON                    从shell传递来的包含当前环境变量的数组
     ERRNO                      当使用close函数或者通过getline函数读取的时候,发生的重新定向错误
                                的描述信息就保存在这个变量中
     FIELDWIDTHS                在对记录进行固定域宽的分割时,可以替代FS的分隔符的列表
     FILENAME                   当前的输入文件名
     FNR                        当前文件的记录号
     FS                         输入域分隔符,默认是空格
     IGNORECASE                 在正则表达式和字符串操作中关闭大小写敏感
     NF                         当前文件域的数量
     NR                         当前文件的记录数
     OFMT                       数字输出格式
     OFS