第七章 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