前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux三剑客之awk(2):awk模块、变量与执行

Linux三剑客之awk(2):awk模块、变量与执行

作者头像
宜信技术学院
发布2019-07-02 17:48:14
1K0
发布2019-07-02 17:48:14
举报
文章被收录于专栏:宜信技术实践宜信技术实践

拓展阅读:Linux三剑客之awk(1):awk简介与表达式示例

完整awk结构图如下:

图片3.png
图片3.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 第一个作用: 定义内置变量

代码语言:javascript
复制
[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 第二个作用:打印标识

代码语言:javascript
复制
[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实现计算功能

代码语言:javascript
复制
 [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 第一个作用:打印标识

代码语言:javascript
复制
[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

代码语言:javascript
复制
[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表示?

代码语言:javascript
复制
[root@creditease awk]# seq 100|awk '{i=i+$0}END{print i}'
5050

四、awk详解小结

1、BEGIN和END模块只能有一个,BEGIN{}BEGIN{}或者END{}END{}都是错误的。

2、找谁干啥模块,可以是多个。

五、awk执行过程总结

图片4.png
图片4.png

awk执行过程:

1、命令行的赋值(-F或-V)

2、执行BEGIN模式里面的内容

3、开始读取文件

4、判断条件(模式)是否成立

  • 成立则执行对应动作里面的内容
  • 读取下一行,循环判断
  • 直到读取到最后一个文件的结尾

5、最后执行END模式里面的内容

◆ ◆ ◆  ◆ ◆

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、BEGIN模块
  • 二、awk内置变量(预定义变量)
    • 2.1 第一个作用: 定义内置变量
      • 2.2 第二个作用:打印标识
        • 2.3 awk实现计算功能
        • 三、END模块
          • 3.1 第一个作用:打印标识
            • 3.2 第二个作用:累加
            • 四、awk详解小结
            • 五、awk执行过程总结
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档