awk模块、变量、执行
1、BEGIN模块
BEGIN模块在awk读取文件之前就执行
BEGIN模式常常被用来修改内置变量ORS、RS、FS、OFS等值
2、awk内置变量(预定义变量)
变量名 | 属性 |
---|---|
$0 | 当前记录,一整行 |
$1,$2,$3....$a | 当前记录的第n个区域,区域间由FS分隔。 |
FS | 输入区域分隔符,默认是空格。field separator |
NF | 当前记录中的区域个数,就是有多少列。number of field |
NR | 已经读出的记录数,就是行号,从1开始。number of record |
RS | 输入的记录分隔符默认为换行符。record separator |
OFS | 输出区域分隔符,默认也是空格。output record separator |
FNR | 当前文件的读入记录号,每个文件重新计算。 |
FILENAME | 当前正在处理的文件的文件名 |
FS RS支持正则表达式
2.1 第一个作用: 定义内置变量
2.2 第二个作用:打印标识
2.3 awk实现计算功能
3、END模块
END在awk读取完所有的文件的时候,再执行END模块,一般用来输出一个结果(累加,数组结果)。也可以和BEGIN模块一起使用
3.1 第一个作用:打印标识
3.2 第二个作用:累加
1)统计空行(/etc/services文件)
2)算术题
1+2+3......+100=5050,怎么用awk表示?
4、awk经验
1、BEGIN和END模块只能有一个,BEGIN{}BEGIN{}或者END{}END{}都是错误的。
2、找谁干啥模块,可以是多个。
5、awk执行过程
- 命令行的赋值(-F或-V)
- 执行BEGIN模式里面的内容
- 开始读取文件
- 判断条件(模式)是否成立
- 成立则执行对应动作里面的内容
- 读取下一行,循环判断
- 直到读取到最后一个文件的结尾
- 最后执行END模式里面的内容