写点什么

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

  • 2020-02-10
  • 本文字数:2035 字

    阅读完需:约 7 分钟

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

完整 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


2020-02-10 21:091296

评论

发布
暂无评论
发现更多内容

NFTScan 与 DeBox 达成合作,双方在 NFT 社交数据层面展开合作

NFT Research

NFT

面试被怼:技术更新这么快,你还不懂响应式微服务就out了

Java spring 微服务 响应式

CloudCanal 落地 StarRocks 数据迁移同步的实践与思考

StarRocks

数据库

好用的Java开发工具:IntelliJ IDEA 2022v2022.3.3汉化激活版

真大的脸盆

Java Mac Mac 软件 Java 开发

adobe安装提示错误“Error:SyntaxError:JSON Parse error:Unexpected EOF”

互联网搬砖工作者

软件测试/测试开发丨app自动化测试(iOS)元素定位(新手篇)

测试人

软件测试 自动化测试 测试开发

ByteHouse:基于ClickHouse 的实时计算能力升级

字节跳动数据平台

大数据 云原生 flink 消费 kafka Clickhouse 企业号 3 月 PK 榜

企业数智化转型不仅是可行的,还是必行!

加入高科技仿生人

人工智能 低代码 制造业 数智化

快速掌握网站监控关键数据:仪表盘的创建与管理

云智慧AIOps社区

监控 监控宝 监控工具 云智慧 网站监控

科技+卫生=智慧公厕,城市焕然一新!

光明源智慧厕所

智慧城市

软件工程高效学 | 软件的内涵与危机

TiAmo

软件工程 软件开发

如何通过Java代码在Word中创建可填充表单

在下毛毛雨

Java 表单 word文档

CCF BDCI“大数据平台安全事件检测与分类识别”赛题,奇点云夺冠

奇点云

数据安全 奇点云 个人信息保护

初学后端,如何做好表结构设计?

王中阳Go

Go golang 数据库 表结构 golang 面试

百度文库接入文心一言,国内首个生成式AI文档服务即将上线

极客天地

软件测试/测试开发丨一文带你了解接口测试价值与体系

测试人

软件测试 自动化测试 测试开发

软件测试/测试开发丨接口测试必备技能-常见接口协议解析

测试人

软件测试 自动化测试 测试开发

JVM 堆体系结构及其内存调优

Java JVM

不可错过!Arm 、Intel 及阿里云等资深技术专家现场解读系统安全

OpenAnolis小助手

系统安全 Meetup 龙蜥社区 sig 机密计算

中国全屋智能市场将达万亿级,仅3.5%住宅渗透率拥有巨大潜力

极客天地

使用流水线插件实现持续集成、持续部署

北京好雨科技有限公司

Kubernetes CI/CD rainbond

苹果M1芯片的Mac怎么关闭SIP?M1 mac关闭Sip方法教程!

互联网搬砖工作者

百度CTO王海峰:全栈AI技术加持,打造新一代大语言模型文心一言

飞桨PaddlePaddle

还在stream中使用peek?不要被这些陷阱绊住了

程序那些事

Java java8 程序那些事 JDK20

开源订单管理系统

源字节1号

开源 软件开发 小程序开发

2023中国儿童防敏市场发展洞察

易观分析

医疗 防敏 儿童

Flink 在中泰证券的实践与应用

Apache Flink

大数据 flink 实时计算

Linux三剑客之awk(2):awk模块、变量与执行_开源_秦伟_InfoQ精选文章