写点什么

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

评论

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

区块链教育 丨 首批区块链专业新生正式入学

CECBC

区块链技术 区块链教育

MySQL-技术专题-问题分析

码界西柚

EffectiveJava读书笔记-01-对象创建与销毁

wander

读书笔记 编程开发

Web前后端:如何分离,如何解耦?

华为云开发者联盟

大前端 后端 开发

Nacos-技术专题-配置中心实现

码界西柚

2020年秋招阿里136道Java高级岗面试题(含答案及复习资源)

Java架构之路

Java 程序员 面试 算法 编程语言

lldb常用命令与调试技巧

iOSer

ios lldb常用命令 lldb调试技巧

MySQL-技术专题-查询速度性能

码界西柚

来不及解释了,快上车!力软快速开发平台,助力企业搭乘万物互联的顺风车

Learun

架构师训练营第四周作业

郎哲158

开源数据库这么香,为什么我们还要下功夫自研?

华为云开发者联盟

数据库 开源 数据

建筑行业区块链应用场景是怎样的

CECBC

区块链 行业资讯

SpringBoot-技术专题-启动原理

码界西柚

技术实操丨SoundNet迁移学习之由声音分类到语音情感识别

华为云开发者联盟

AI 数据 语音识别

光大银行刘淼:基于华为云GaussDB(DWS) 数据仓库创新实践

华为云开发者联盟

数据仓库 数据 huawei

深入分析CRM系统对现代企业的作用

Learun

架构师训练营1期第三周作业

木头发芽

互联网应用系统技术方案主要解决什么问题?

博古通今小虾米

国庆期间,我造了台计算机

yes

计算机 底层

从构建小系统到架构分布式大系统,Spring Boot2的精髓全在这里了

Java架构之路

Java 程序员 面试 Spring Boot 编程语言

31道Java核心面试题,一次性打包送给你

小Q

Java 学习 程序员 架构 面试

Spring Cloud 微服务实践(7) - 日志

xiaoboey

kafka 微服务 Spring Cloud 日志 spring cloud stream

spring-boot-route(十)多数据源切换

Java旅途

Java Spring Boot

开源=免费?

Learun

Java程序员月薪多少K才能在北上广买得起房?

Java架构之路

Java 程序员 编程语言

PyFlink + 区块链?揭秘行业领头企业 BTC.com 如何实现实时计算

Apache Flink

flink

程序员去外包真的不可取吗?

Java架构师迁哥

区块链是一个不知道要解决什么问题的解决方案吗?

CECBC

比特币 区块链 银行

架构师训练营第四章 系统架构总结

郎哲158

字节跳动 Flink 单点恢复功能实践

Apache Flink

flink

Python时间序列分析简介(2)

计算机与AI

Python 时间序列

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