Linux- 系统随你玩之--文本处理三剑客-带头一哥-awk

news2025/1/15 23:00:49

文章目录

  • 1、awk概述
  • 2、awk原理
    • 2.1、 awk 工作原理
    • 2.2、 与sed工作原理比较
    • 2.3、 awk与sed的区别
  • 3、使用方法及原理
    • 3.1、格式如下:
    • 3.2、 匹配规则
    • 3.3、 参数说明
    • 3.4、处理规则与流程控制
    • 3.5、 常用 awk 内置变量
    • 3.6、 awk 正则表达式解释
  • 4、操作实例
    • 4.1、 准备工作
    • 4.2、 操作实例

1、awk概述

AWK 来自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。它是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描,过滤,为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其它的功能。
平时主要用来处理文本,将文本按照指定的格式输出。其中包含了变量,循环以及数组。

2、awk原理

2.1、 awk 工作原理

  • 当读到第一行时,匹配条件,然后执行指定动作,在接着读取第二行数据处理,不会默认输出。
  • 如果没有定义匹配条件,则是默认匹配所有数据行,awk隐含循环,条件匹配多少次,动作就会执行多少次。
  • 逐行读取文本,默认以空格或tab键为分割符进行分割,将分割所得的各个字段,保存到内建变量中,并按模式或或条件执行编辑命令。

2.2、 与sed工作原理比较

sed命令常用于一整行的处理。而awk比较倾向于将一行分成多个 “ 字段 ” 然后再进行处理。
awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。
在使用awk命令的过程中,可以使用逻辑操作符。(&&“表示"与”、“||表示"或”、"!“表示非”;还可以进行简单的数学运算,如+、一、*、/、%、^分别表示加、减、乘、除、取余和乘方。)

2.3、 awk与sed的区别

awk 用于”比较规范“的文本处理,用于统计指定内容的数量并输出字段。
sed 将不规范或无规则的文本,处理成相对”比较规范“的文本。

3、使用方法及原理

3.1、格式如下:

 格式1: awk '{pattern + action}' filenames  //awk [选项] '匹配规则和处理规则 ' [处理文本路径]
 格式2: awk  -f  脚本文件   filenames

在这里插入图片描述

3.2、 匹配规则

它的匹配规则主要是:正则表达式
处理规则主要是:

  • 设置变量
  • 设置数组
  • 定义函数 (用的比较少)
  • 数组循环
  • 加减乘除运算
  • 字符串拼接
    处理规则

3.3、 参数说明

-F参数:指定分隔符,可指定一个或多个
print 后面做字符串的拼接

awk -F":" '{ print $1 }' /etc/passwd

在这里插入图片描述

awk -F":" '{ print $1 $3 }' /etc/passwd

在这里插入图片描述

awk -F":" '{ print $1 " " $3 }' /etc/passwd

在这里插入图片描述

awk -F":" '{ print "username: " $1 "\t\tuid:" $3" }' /etc/passwd

在这里插入图片描述

3.4、处理规则与流程控制

BEGIN 和 END 模块
通常,对于每个输入行, awk 都会执行每个脚本代码块一次。然而,在许多编程情况中,可能需要在 awk 开始处理输入文件中的文本之前执行初始化代码。对于这种情况, awk 允许您定义一个 BEGIN 块。

因为 awk 在开始处理输入文件之前会执行 BEGIN 块,因此它是初始化 FS(字段分隔符)变量、打印页眉或初始化其它在程序中以后会引用的全局变量的极佳位置。
awk 还提供了另一个特殊块,叫作 END 块。 awk 在处理了输入文件中的所有行之后执行这个块。通常, END 块用于执行最终计算或打印应该出现在输出流结尾的摘要信息。
小结:
逐行执行开始之前执行什么任务,结束之后再执行什么任务,用BEGIN、END。
BEGIN:一般用来做初始化操作,仅在读取数据记录之前执行一次。
END:一般用来做汇总操作,仅在读取完数据记录之后执行一次。

3.5、 常用 awk 内置变量

在这里插入图片描述

3.6、 awk 正则表达式解释

在这里插入图片描述

4、操作实例

4.1、 准备工作

准备文件fyydlz.txt的文本如下(可以利用touch命令和vi命令组合创建):

  1. hello world fyydlz
  2. wold hello
  3. nothing is important
  4. i like fyydlz fyydlz

4.2、 操作实例

这里是最常用的几个操作例子:
1、打印“开始”,打印每行,打印“结束”:

 awk 'BEGIN{ print "开始" } { print } END{ print "结束" }' fyydlz.txt

在这里插入图片描述

2、打印每行的行号:

awk '{print NR}' fyydlz.txt

在这里插入图片描述

3、打印每行的文本:

awk '{print $0}' fyydlz.txt

在这里插入图片描述

4、打印每行的第1列(默认用空格分离):

awk '{print $1}' fyydlz.txt

在这里插入图片描述

5、打印每行的最后1列(默认用空格分离):

awk '{print $NF}' fyydlz.txt

在这里插入图片描述

6、打印每行的倒数第2列(默认用空格分离):

awk '{print $(NF-1)}' fyydlz.txt

在这里插入图片描述

7、打印每行,并为每行带上行号:
awk '{print NR":",$0}' fyydlz.txt在这里插入图片描述

8、打印含有序号的行:

 awk '/\d./ {print}' fyydlz.txt

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/178590.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(十七)抽象队列同步器AQS

AQSAbstractQueuedSynchronizer抽象同步队列简称AQS,它是实现同步器的基础组件,并发包中锁的底层就是使用AQS实现。类图如下,AbstractQueuedLongSynchronizer与AbstractQueuedSynchronizer结构一模一样,只是AbstractQueuedSynchro…

Springboot+java师生交流答疑作业系统

,本系统拥有学生,教师,管理员三个角色,学生可以注册登陆系统,查看新闻,查看教学,在线提问答疑,提交作业,发布交流,留言反馈等功能,教师可以发布教…

恶意代码分析实战 14 反虚拟机技术

14.1 Lab17-01 题目 这个恶意代码使用了什么反虚拟机技术? 恶意代码用存在漏洞的x86指令来确定自己是否运行在虚拟机中。 如果你有一个商业版本IDAPro,运行第17章中代码清单17-4所示的IDAPython脚本(提供如jindAniM.py)&#…

spring boot前后端交互之数据格式转换

在前后端分离开发的项目种,前端获取数据的方式基本都是通过Ajax。请求方法也有所不同,常见的有POST,GET,PUT,DELETE等。甚至连请求的数据类型都不一样,x-www-form-urlencodeed,form-data,json等。 那么在前后端交互过程中,具体的数据该如何接…

ESP32设备驱动-8x8LED点阵驱动(基于Max7219+SPI)

8x8LED点阵驱动(基于Max7219+SPI) 1、Max7219介绍 MAX7219/MAX7221是紧凑型串行输入/输出共阴极显示驱动器,可将微处理器(Ps)连接到多达8位的7段数字LED显示器、条形图显示器或64个独立LED。片上包括一个 BCD 代码 B 解码器、多路扫描电路、段和数字驱动器,以及存储每个数字…

通信电子、嵌入式类面试题刷题计划04

文章目录036——看门狗电路的作用是什么?【社招】037——你了解CAN总线协议吗?说一说你的理解【社招】038——锁存器、触发器、寄存器三者的区别?【校招】039——D触发器和D锁存器的区别是什么?【校招】040——三极管和MOS管的区别…

Cadence PCB仿真使用Allegro PCB SI生成单网络EMI报告Single Net EMI Report及报告导读图文教程

🏡《Cadence 开发合集目录》   🏡《Cadence PCB 仿真宝典目录》 目录 1,概述2,生成报告3,报告导读4,总结1,概述 单网络EMI报告是值将差分模式下的网络视为单个网络,分析来自时钟上升沿的辐射影响。本文简单介绍使用Allegro PCB SI生成单网络EMI报告的方法,及Singl…

搜索引擎位置跟踪应用SerpBear

什么是 SerpBear ? SerpBear 是一款开源搜索引擎位置跟踪应用程序。它允许你跟踪你的网站在谷歌中的关键词位置,并得到他们的位置通知。 软件特点: 无限关键词:添加无限域名和无限关键词以跟踪其 SERP电子邮件通知:每天/每周/每…

车载以太网简介

车载以太网简介 基本概念 传统车载网络 LIN:用于通信速率低的场景,比如车窗、座椅等。CAN:目前车载网络首先,低成本高可靠。FlexRay :具备故障容错的车载总线系统。MOST:内置流媒体数据信道,…

2023年企业信息安全缺陷和解决方案,防止职员外泄信息

随着网络的发展和普及,信息安全与每个人息息相关,包含方方面。每个人既是独立个体又必须和社会交换资源。这就需要把控一个尺度。 要了解信息安全,首先需要对信息有个大体了解。从拥有者和使用者分类分为,个人,企业&a…

恶意代码分析实战 11 恶意代码的网络特征

11.1 Lab14-01 问题 恶意代码使用了哪些网络库?它们的优势是什么? 使用WireShark进行动态分析。 使用另外的机器进行分析对比可知,User-Agent不是硬编码。 请求的URL值得注意。 回答:使用了URLDownloadToCacheFileA函数&#…

JavaEE多线程-定时器

目录一、定时器1.1 什么是定时器?1.2 定时器的构成二、简单实现定时器一、定时器 1.1 什么是定时器? 定时器是多线程编码中的一个重要组件,它就好比一个闹钟,例如我们想去坐车,但是不想现在去坐车,想8:30去坐车,于是我们订了一个8点钟的闹钟,也就是说定…

Linux内核驱动初探(四) 内部看门狗

目录 0. 前言 1. menuconfig 2. 设备树 3. 拓展试验 0. 前言 这次的内部看门狗驱动也比较顺利,重点看了 原理图和4.19.x 内核的配置。 内部看门狗设备名叫做 /dev/watchdog 。 1. menuconfig 我们在 linux-menuconfig 里面如下设置:进入 Device D…

[Java]JavaWeb学习笔记(动力节点老杜2022)

文章目录🥽 Tomcat服务器🌊 下载与安装🌊 关于Tomcat服务器的目录🌊 启动Tomcat🌊 实现一个最基本的web应用(这个web应用中没有java小程序)🥽 静态资源与动态资源🥽 模拟…

GPU虚拟化(留坑)

文章内容大程度参考B站王利明老师对《GPU虚拟化技术分享》的演讲:https://b23.tv/uQKBpcK GPU 有什么用? GPU可以用于图形渲染,也能够用于高性能计算和编解码等场景。 图:GPU 的典型软件架构(不含虚拟化) …

注解存储对象到Spring,详解 五大类注解 和方法注解

上一篇博客我们介绍了如何使用xml来引入bean对象,当项目多的时候,显然那样是比较麻烦的。现在我们只需要 个注解就可以替代了。注意:注解和xml可以同时使用准备工作:配置扫描路径我们需要配置 下存储对象的扫描包路径,只有被配置的…

【笔记】openwrt - full cone NAT(全锥NAT)、解决“arp_cache: neighbor table overflow!”

最近安装了比特彗星(bitcomet)后,老是收到警告说日志的接收超过每秒上限了。一看日志,好家伙,一堆的kern.info kernel: [194004.157620] neighbour: arp_cache: neighbor table overflow!日志,还是kernel的…

损失函数总结

回归损失与分类损失 回归用于逼近某个数值,预测的结果是连续的,例如预测小明的身高,160,161,162,163cm。平方损失即MSE: 分类用于预测物体属于某一个标签,预测的结果是离散的,例如预测明天是否下雪:是or否。 由于预测分类,最终的输出需要介于(0,1)之间,通常在网络…

Redis消息队列 | 黑马点评

目录 一、认识消息队列 二、List模拟消息队列 三、PubSub的消息队列 四、Stream的消息队列(重点) 1、单消费模式 2、消费者组 五、redis三种消息队列对比 六、优化秒杀实战 1、创建消息队列 2、修改下单脚本 3、接收消息处理 一、认识消息队列 …

设计模式 - 创建型模式_工厂方法模式

文章目录创建型模式概述CaseBad ImplBetter Impl (⼯⼚模式优化代码)创建型模式 创建型模式提供创建对象的机制, 能够提升已有代码的灵活性和可复⽤性。 类型实现要点工厂方法定义⼀个创建对象的接⼝,让其⼦类⾃⼰决定实例化哪⼀…