大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

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:091347

评论

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

AI IDE 正式上线!通义灵码开箱即用

阿里巴巴云原生

阿里云 云原生 通义灵码

AI IDE 正式上线!通义灵码开箱即用

阿里云云效

阿里云 云原生 通义灵码

AI Agent需要什么样的数据库?

元闰子

实现企业级 MCP 服务统一管理和智能检索的实践

阿里巴巴云原生

阿里云 云原生 nacos MSE

(四)元模型建模理论

KaYa

AI Agent 工程师绕不开的必修课:API 网关 vs API 管理

阿里巴巴云原生

阿里云 AI 云原生 API网关

数字人如何通过垂类营销大模型获得“行业超脑”的能力

东信营销科技

智能体 #AI AI营销 #数字人 #东信营销科技

Go语言是现在进大厂的捷径?快来看看Golang学习语言图

Geek_Yin

Java 程序员 java面试 Java面试题

面了个腾讯拿 38K 出来的,让我见识到了基础的天花板

Geek_Yin

Java 程序员 Java 面试题 java 架构

2025Go面试八股(含100道答案)

王中阳Go

Go 最新面试题

工业软件低代码开发平台技术架构研究

优秀

低代码 低代码开发平台

React-native之Flexbox

溪抱鱼

前端开发 React

React-native实战系列

溪抱鱼

前端 React

油气行业AI转型的三昧真火

脑极体

AI

AI浪潮下的认知重构:从一个数据老兵的转型思考

金松(李博源)

职场 职业转型 #大模型 #产品经理

记录第一次公司内部分享:如何基于大模型搭建企业+AI业务

程序员海军

大模型 #AI #DeepSeek

别再为老项目重构熬秃头,1天解锁Java智能改造技能!

飞算JavaAI开发助手

还在死磕虚拟机?应用为中心的IT管理新范式,可能被你忽略了!

北京好雨科技有限公司

云原生 虚拟机、 rainbond 企业号 6 月 PK 榜

HikariCP 可观测性最佳实践

观测云

数据库

高防服务器价格高原因分析

网络安全服务

CDN DDoS 带宽 高防服务器 DDoS 攻击

低代码:重构企业数字化开发底座

引迈信息

华为初面 + 综合面试,附上面试题,share 给大家~

Geek_Yin

Java 程序员 java面试 Java面试题

95年,28岁、聊聊外包四年的真实感受

Geek_Yin

Java 程序员 java面试 Java面试题

其实,从程序员到架构师,只需要掌握这些知识点就够了!

程序员高级码农

程序员 架构师

OpenAI SDK 上新 RealtimeAgent;OpenAudio S1 语音生成模型:语调情感标记,精确控制风格

声网

微擎面板:免费商用级,重构企业级服务器运维新体验

微擎应用市场

高性能图片优化方案

杨充

AI助力Java开发:减少70%重复编码,实战效能提升解析

飞算JavaAI开发助手

ETLCloud:重新定义AI驱动的数据集成未来

谷云科技RestCloud

人工智能 AI 数字化转型 ETL 数据集成

全网首发!马士兵内部共享—1658页《Java面试突击核心讲》

Geek_Yin

Java 程序员 Java面试题

TortoiseSVN使用-合并深度介绍

刘大猫

人工智能 svn 算法 数据分析 tortoiseSVN

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