完整 awk 结构图如下:
1560755355824033606.png
一、BEGIN 模块
BEGIN 模块在 awk 读取文件之前就执行,BEGIN 模式常常被用来修改内置变量 ORS,RS,FS,OFS 等的值。可以不接任何输入文件
二、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 第一个作用: 定义内置变量
[root@creditease awk]# awk 'BEGIN{RS="#"}{print $0}' awk.txt
ABC
DEF
GHI
GKL$123
BAC
DEF
GHI
GKL$213
CBA
DEF
GHI
GKL$321
复制代码
2.2 第二个作用:打印标识
[root@creditease awk]# awk 'BEGIN{print "=======start======"}{print $0}' awk.txt
=======start======
ABC#DEF#GHI#GKL$123
BAC#DEF#GHI#GKL$213
CBA#DEF#GHI#GKL$321
复制代码
2.3 awk 实现计算功能
[root@creditease files]# awk 'BEGIN{a=8;b=90;print a+b,a-c,a/b,a%b}'
98 8 0.0888889 8
复制代码
三、END 模块
END 在 awk 读取完所有的文件的时候,再执行 END 模块,一般用来输出一个结果(累加,数组结果)。也可以是和 BEGIN 模块类似的结尾标识信息。
3.1 第一个作用:打印标识
[root@creditease awk]# awk 'BEGIN{print "=======start======"}{print $0}END{print "=======end======"}' awk.txt
=======start======
ABC#DEF#GHI#GKL$123
BAC#DEF#GHI#GKL$213
CBA#DEF#GHI#GKL$321
=======end======
复制代码
3.2 第二个作用:累加
1)统计空行(/etc/services 文件)
grep sed awk
[root@creditease awk]# grep "^$" /etc/services |wc -l
17
[root@creditease awk]# sed -n '/^$/p' /etc/services |wc -l
17
[root@creditease awk]# awk '/^$/' /etc/services |wc -l
17
[root@creditease awk]# awk '/^$/{i=i+1}END{print i}' /etc/services
17
复制代码
2)算术题
1+2+3…+100=5050,怎么用 awk 表示?
[root@creditease awk]# seq 100|awk '{i=i+$0}END{print i}'
5050
复制代码
四、awk 详解小结
1、BEGIN 和 END 模块只能有一个,BEGIN{}BEGIN{}或者 END{}END{}都是错误的。
2、找谁干啥模块,可以是多个。
五、awk 执行过程总结
1560755367438038139.png
awk 执行过程:
1、命令行的赋值(-F 或-V)
2、执行 BEGIN 模式里面的内容
3、开始读取文件
4、判断条件(模式)是否成立
成立则执行对应动作里面的内容
读取下一行,循环判断
直到读取到最后一个文件的结尾
5、最后执行 END 模式里面的内容
**◆ ◆ ◆ ◆ ◆**
发现文章有错误、对内容有疑问,都可以通过关注宜信技术学院微信公众号(CE_TECH),在后台留言给我们。我们每周会挑选出一位热心小伙伴,送上一份精美的小礼品。快来扫码关注我们吧!********
本文转载自宜信技术学院网站。
原文链接:http://college.creditease.cn/detail/261
评论