awk把输入流看作一连串记录的集合,每一条记录都可进一步细分为字段.通常,一行一条记录,而字段则由一个或者多个非空白字符的单词组成.然而,是什么构成一条记录和一个字段,完全由程序员控制,且它们的意义,甚至可以在处理期间更改.
一个awk程序是一对以pattern { action } 组合而成的,或许,还会加上实现操作细节的函数(function).针对每个匹配于输入数据的模式,操作会被执行,且所有模式都会针对每条输入记录而检查.
模式或操作可以省略其中一个.如果模式省略,则操作将被应用到每条输入记录;如果操作省略,则默认操作为打印匹配的记录到标准输出上.以下是传统awk程序的配置:
pattern { action } 若模式匹配,则执行输出
pattern 若模式匹配,则打印记录
{ action } 对每条记录,执行操作
输入会自动地由一个输入文件切换到下一个,且awk本身通常会处理每个输入文件的打开,读取与关闭,以允许用户程序专心致力于记录的处理.
虽然,模式多半是数字或字符串表达式,不过awk以保留字BEGIN与END提供两种特殊模式.
与BEGIN关联的操作只会执行一次,在任何命令行文件或一般命令行赋值被处理之前,但是在任何开头的-v选项指定已经完成之后.它大部分是用来处理程序所需要的任何特殊初始化工作.
END操作也是只执行一次,用于所有输入数据已被处理完之后.它多半用于产生摘要报告,或是执行清楚操作.
BEGIN与END可以是任意顺序,可以存在于awk程序内的任何位置.不过,为了方便,我们通常将BEGIN模式放在程序第一个位置,而将END模式放在最后.
当指定多个BEGIN或END模式,则它们将按照在awk程序里的顺序,一次执行.这允许使用额外的-f选项纳入库代码,以提供起始与清除操作.
二. 程序元素
awk处理数字与字符串数据.awk提供了标量(scalar)与数组(array)两种变量以保存数据,数字与字符串表达式,还提供了一些语句类型以处理数据:赋值,注释,条件,函数,输入,循环及输出.awk表达式与语句的许多功能,都与C语言相似.
2.1 注释与空白
awk里的注释从#开始到改行结束,就像在SHELL里那样.空行等同于空的注释.
2.2 字符串与字符串表达式
awk里的字符串通常以引号定界.
阅读(1407) | 评论(0) | 转发(0) |