awk是一种用于处理文本的编程语言工具,使用类似于C的语法,并在很多方面
类似于 she ll 编程语言,awk 名称是由它三个最初设计者的姓氏的第一个字母而命名。awk 是一种模式扫描和处理语言,尤其适合处理结构化的文本,如纯文本的表格等,它几乎可以完成gre p和se d所能完成的全部工作。同时,awk还支持流程控制、数学运算、进程控制语句甚至于内置的变量和函数。与 sed 一样,awk 不会修改输入文件的内容,可以使用输出重定向将 awk 的输出保存到文件中。

awk 命令的格式
格式1: awk [OPTION] 'program-statements' [input-file]

执行命令行上的awk程序语句。若在一行上书写多个awk程序语句时,各个语句使用分号(;)间隔。

格式2: awk [OPTION] -f program-file [input-file]...
执行脚本文件中的awk程序语句。当awk程序语句很多时,可将所有的awk程序语句存成脚本文件,然后在命令行上使用 -f 参数指定这个文件。

(1)常用参数:
-F fs : 在awk中,缺省的字段分隔符一般是空格符或TAB。在- F后面跟着你想用的分隔符即可改变字符分隔符。
-v var=val : 对变量 var 赋初值为 val,变量既可以是 awk 的内置变量也可以是自定义变量。

input-file:awk 处理的文件列表,若省略,awk 将从标准输入中读取输入,也可以从输入重定向或管道获得输入。

(2)awk 中每一个语句(statements)= 模式(pattern)+ 动作(actions)。只要模式匹配,awk 就会执行相应的动作。动作部分由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内。

patte rn 和 {actions} 可以省略,但不能同时省略;
patte rn 省略时表示对所有的输入行执行指定的 {actions};
{actions} 省略时表示打印匹配行,即 { print } 。

模式(pattern)部分可以是:
/regular expression/ : 使用扩展的正则表达式。
relational expression : 使用关系表达式,可以使用与 C 语言类似的关系运算符。
pattern1, pattern2 : 范围模式,匹配行的范围。表示从匹配pattern1的行到匹配pattern2的行。
BEGIN : 指定在第一条输入记录被处理之前要执行的动作,通常可在此设置全局变量。
END : 指定在最后一条输入记录被读取之后要执行的动作,通常可在此输出统计数据。

动作(actions)部分可以是:变量或数组赋值、输入/输出语句、内置函数和自定义函数、流程控制语句

(3)awk 命令的一般形式为:
awk 'BEGIN {actions}
pattern1 {actions}
......
patternN {actions}
END {actions}' input-file
其中 BEGIN {actions} 和 END {actions} 是可选的。awk 的执行过程如下:如果存在 BEGIN

1. awk 首先执行它指定的 actions。
2. awk 从输入中读取一行,称为一条输入记录。
3.awk 将读入的记录分割成数个字段,并将第一个字段放入变量 $1 中,第二个放入变量 $2 中,以此类推;$0 表示整条记录;字段分隔符可以通过选项 -F 指定,否则使用缺省的分隔符。
4. 把当前输入记录依次与每一个语句中 pattern 比较:如果相匹配,就执行对应的 actions;如果不匹配,就跳过对应的 actions,直到完成所有的语句。
5. 当一条输入记录处理完毕后,awk 读取输入的下一行,重复上面的处理过程,直到所有输入全部处理完毕。
6. 如果输入是文件列表,awk 将按顺序处理列表中的每个文件。
7. awk 处理完所有的输入后,若存在 END,执行相应的 actions。