写点什么

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

评论

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

YashanDB数据库查询优化策略详解

数据库砖家

YashanDB数据库核心功能解析及使用教程

数据库砖家

YashanDB数据库核心技术架构及未来发展趋势探讨

数据库砖家

YashanDB数据库支持的多协议访问技术探究

数据库砖家

YashanDB数据库架构的未来发展趋势展望

数据库砖家

行业热点丨手机中框设计如何体现增材思维?

Altair RapidMiner

仿真 CAE 3D打印 Inspire 增材制造

北京京东,看看难度

王中阳Go

Java

2025香港消费者科技及创新展览会

AIOTE智博会

创新展 科技展c 科技创新展

用好 JUnit 5 的高级特性:提升单测效率和质量

电子尖叫食人鱼

JUnit

YashanDB数据库版本升级及数据兼容性解决方案

数据库砖家

YashanDB数据库版本升级注意事项及操作指南

数据库砖家

YashanDB数据库环境搭建及性能测试详细教程

数据库砖家

ISO 50003对提供能源管理体系审核和认证的机构的要求与MyEMS开源能源管理系统

开源能源管理系统

开源 能源管理 开源能源管理系统 ISO50003

Perf 的 cpu-clock 与 cpu-cycles 采样实现与对比

mazhen

Linux Performance perf kernel

AI领域的agent是什么意思?

Techinsight

YashanDB数据库支持的全文检索功能及配置指南

数据库砖家

YashanDB数据库版本升级的风险与注意事项

数据库砖家

YashanDB数据库海量数据存储方案解析

数据库砖家

AI技术在英语口语练习中的应用

北京木奇移动技术有限公司

软件外包公司 AI英语学习 AI技术应用

从“大模型热”到“Agent潮”,“真风口”还是“伪命题”?

Techinsight

全面拆解:何为AI Agent?

Techinsight

YashanDB数据库支持的事务隔离级别详解

数据库砖家

微擎生态驱动的招商信息管理平台

微擎应用市场

火爆的AI Agent,到底是什么?

Techinsight

扫码点餐微擎生态驱动的智慧餐饮解决方案

微擎应用市场

MyEMS开源能源管理系统 + EG200 4G网关

开源能源管理系统

开源 能源管理 开源能源管理系统 EG200

微擎生态驱动的多端客服管理平台

微擎应用市场

GAITC2025|张科:端云一体大模型推理应用实战

京东零售技术

Function AI 工作流发布:以 AI 重塑企业流程自动化

阿里巴巴云原生

阿里云 云原生 函数计算

YashanDB数据库支持哪些编程语言?开发集成教程

数据库砖家

施耐德电气EMS+与MyEMS对比分析

开源能源管理系统

开源 能源管理 开源能源管理 施耐德电气EMS

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