9.6/9.7 awk awk程序通常由 BEGIN语句块,模式匹配的通用语句块,END语句块,这三部分组成 awk 的工作原理:  第一步:执行BEGIN{action;… }语句块中的语句   第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ action;… }语句块,它逐行扫描文件,从第一行到最后一行重复这 个过程,直到文件全部被读取完毕。   第三步:当读至输入流末尾时,执行END{action;…}语句块    BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个 可选的语句块,比如变量初始化、打印输出表格的表头等语句通常 可以写在BEGIN语句块中    END语句块在awk从输入流中读取完所有的行之后即被执行,比如 打印所有行的分析结果这类信息汇总都是在END语句块中完成,它 也是一个可选语句块    pattern语句块中的通用命令是最重要的部分,也是可选的。如果 没有提供pattern语句块,则默认执行{ print },即打印每一个读取 到的行,awk读取的每一行都会执行该语句块

print格式 print item1,item2,.. a. 逗号为分隔符 b. 输出的item可以是字符串,数值,当前记录的字段,变量或者awk的表达式 c. 省略item,相当于print $0

内置变量 描述 $n 当前记录的第n个字段,字段间由FS分隔 $0 完整的输入记录 ARGC 命令行参数的数目 ARGIND 命令行中当前文件的位置(从0开始算) ARGV 包含命令行参数的数组 CONVFMT 数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组 ERRNO 最后一个系统错误的描述 FIELDWIDTHS 字段宽度列表(用空格键分隔) FILENAME 当前文件名 FNR 各文件分别计数的行号 FS 字段分隔符(默认是任何空格) IGNORECASE 如果为真,则进行忽略大小写的匹配 NF 一条记录的字段的数目 NR 已经读出的记录数,就是行号,从1开始 OFMT 数字的输出格式(默认值是%.6g) OFS 输出记录分隔符(输出换行符),输出时用指定的符号代替换行符 ORS 输出记录分隔符(默认值是一个换行符) RLENGTH 由match函数所匹配的字符串的长度 RS 记录分隔符(默认是一个换行符) RSTART 由match函数所匹配的字符串的第一个位置 SUBSEP 数组下标分隔符(默认值是/034)