写点什么

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

评论

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

中山市政务服务数据管理局党组书记叶永忠:积极构筑智慧联接新底座,打造中型智慧城市标杆

InfoQ_967a83c6d0d7

在Spark Scala/Java应用中调用Python脚本,会么?

华为云开发者联盟

Python spark python脚本 Spark Scala Java应用

开源demo| 智慧协同demo升级——协同更直观方便

anyRTC开发者

音视频 白板 智慧协同 开源demo 远程协助

助力产教融合,夯实数据库产业人才基座!openGauss社区分委会正式成立

openGauss

斯图飞腾数据分析平台Stratifyd获评“2021大数据产业创新服务产品”

InfoQ_967a83c6d0d7

使用 Simple Replay 实用程序简化 Amazon Redshift RA3 迁移评估

亚马逊云科技 (Amazon Web Services)

mad

效果提升28个点!基于领域预训练和对比学习SimCSE的语义检索

百度大脑

人工智能

openGauss 助力邮储银行分布式新核心迈向智能运维时代

openGauss

【量化】量化交易入门系列6:量化交易学习书籍推荐(二)

恒生LIGHT云社区

量化策略 量化投资 量化交易 量化

风口上的“低代码”,是时候来系统学一学了!

博文视点Broadview

Linux云计算好学吗?Linux云计算运维学习资料 vim编辑器和恢复ext4下误删文件

学神来啦

低代码实现探索(十四)工程化思想提高项目质量与可维护性

零道云-混合式低代码平台

Mysql索引

zdd

MySQL

linux系统管理与自动化运维工具用哪款好?

行云管家

Linux 运维 IT运维 自动化运维

workflow 之 Prefect 基本用法(qbit)

qbit

工作流 pipeline workflow 数据流

面试官惊叹,好小子!你这多线程基础可以啊!

XiaoLin_Java

1月月更

万字详解 Spark 数据倾斜及解决方案

五分钟学大数据

spark 1月月更

MySQL高级特性篇教程

编程江湖

MySQL

为什么零售业需要借助CRM系统蓬勃发展

低代码小观

企业管理 CRM 企业管理系统 CRM系统 企业管理软件

使用Amazon Redshift Simple Replay实用程序简化Amazon Redshift RA3迁移评估

亚马逊云科技 (Amazon Web Services)

mad

工具 | 如何对 MySQL 进行 TPC-C 测试?

RadonDB

MySQL RadonDB

skywalking核心概念

淡泊明志、宁静致远

低代码实现探索(十五)安全检查报告提高低代码数据安全性

零道云-混合式低代码平台

基于实例数据详解准确率和召回率

华为云开发者联盟

数据集 AUC 信息检索 准确率 召回率

3个重点,20个函数分析,浅析FFmpeg转码过程

奔着腾讯去

音视频 WebRTC ffmpeg RTMP RTSP

openGauss数据库源码解析系列文章——存储引擎源码解析(五)

openGauss

霸屏综艺,牵手明星,扩列神器皮皮APP的出圈始末

联营汇聚

【网络安全】你必须知道的几个网络安全概念

行云管家

运维 网络安全 防火墙 IT

前端开发之动态管理Nginx集群的方法

@零度

nginx 前端开发

从四种时序数据库选型中脱颖而出,TDengine在工控领域边缘侧的应用

TDengine

数据库 大数据 tdengine 物联网

恒源云(GPUSHARE)_语音识别与语义处理领域之低资源机器翻译综述

恒源云

机器翻译 语音识别

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