【命令操作】Linux三剑客之awk详解 _ 统信 _ 麒麟 _ 方德

原文链接:【命令操作】Linux三剑客之awk详解 | 统信 | 麒麟 | 方德
Hello,大家好啊!今天带来一篇关于Linux三剑客之awk命令详解的文章。在文本处理工具中,awk以其强大的文本筛选、格式化和数据处理功能而闻名。它能够在处理结构化文本和日志分析时快速提取信息、筛选数据,甚至能实现小型脚本的功能,非常适合Linux系统管理员和开发者。

本文将详细介绍awk命令的用法和常见应用场景,帮助大家掌握这款功能丰富的文本处理利器!欢迎大家分享转发,点个关注和在看吧!

什么是awk?

awk是一款编程语言,专门用于文本处理和格式化输出。它逐行扫描文件,根据用户设定的模式或条件对每一行进行处理,能够从文本中提取所需的字段并进行计算操作,是处理结构化文本(如表格、CSV文件)的理想工具。

1.基本语法

awk '条件 {动作}' 文件名

awk会逐行读取文件,匹配满足条件的行,然后对这些行执行指定的动作。

示例文件

以下示例基于一个名为pdsyw.txt的文件内容:

1 Alice 85
2 Bob 90
3 Carol 78
4 Dave 92

每行包含3列:ID、姓名和分数。

2.基本用法

显示文件的所有内容:

pdsyw@pdsyw-PC:~/Desktop$ awk '{print $0}' pdsyw.txt

$0代表当前整行内容,print $0会输出文件的每一行。

指定输出某些列:

pdsyw@pdsyw-PC:~/Desktop$ awk '{print $1, $3}' pdsyw.txt

$1和$3分别表示第一列和第三列,这个命令会输出ID和分数。

输出带分隔符的内容:

pdsyw@pdsyw-PC:~/Desktop$ awk '{print $1 "-" $2 "-" $3}' pdsyw.txt

会在各列之间输出“ - ”分隔符。

3.常用选项

-F:指定输入的分隔符(默认是空格或制表符)。

pdsyw@pdsyw-PC:~/Desktop$ awk -F ':' '{print $1, $3}' /etc/passwd

以冒号:为分隔符,输出第一列和第三列内容。

-v:定义变量,用于传入自定义的值。

pdsyw@pdsyw-PC:~/Desktop$ awk -v threshold=80 '$3 > threshold {print $2, $3}' pdsyw.txt

定义一个名为threshold的变量,将其值设为80。然后输出分数大于80的学生姓名和分数。

4.条件判断

基于数值的条件:

pdsyw@pdsyw-PC:~/Desktop$ awk '$3 > 80 {print $2, $3}' pdsyw.txt

输出分数大于80的学生姓名和分数。

基于字符串的条件:

pdsyw@pdsyw-PC:~/Desktop$ awk '$2 == "Alice" {print $0}' pdsyw.txt

输出姓名为Alice的行。

使用逻辑操作符:

&&:表示“与”。

pdsyw@pdsyw-PC:~/Desktop$ awk '$3 > 80 && $3 <= 90 {print $2, $3}' pdsyw.txt

输出分数大于80且小于等于90的学生姓名和分数。

||:表示“或”。

pdsyw@pdsyw-PC:~/Desktop$ awk '$3 < 80 || $3 > 90 {print $2, $3}' pdsyw.txt

输出分数小于80或大于90的学生姓名和分数。

5.内置变量

awk有一些常用的内置变量,可以在脚本中直接使用:

NR:当前处理的行号。

pdsyw@pdsyw-PC:~/Desktop$ awk '{print NR, $0}' pdsyw.txt

输出每行的行号。

NF:当前行的字段数(列数)。

pdsyw@pdsyw-PC:~/Desktop$ awk '{print $0, "字段数:", NF}' pdsyw.txt

输出每行的字段数。

FS:输入字段分隔符(默认是空格)。

pdsyw@pdsyw-PC:~/Desktop$ awk 'BEGIN {FS=":"} {print $1, $3}' /etc/passwd

在BEGIN块中设置FS为冒号,用于以冒号分隔字段。

OFS:输出字段分隔符(默认是空格)。

pdsyw@pdsyw-PC:~/Desktop$ awk 'BEGIN {OFS=" - "} {print $1, $2, $3}' pdsyw.txt

在输出时使用“ - ”作为分隔符。

RS:输入记录分隔符(默认是换行符)。

pdsyw@pdsyw-PC:~/Desktop$ awk 'BEGIN {RS=""; FS="\n"} {print $1}' pdsyw.txt

将整段文本当作一条记录处理,以空行作为记录分隔符。

ORS:输出记录分隔符(默认是换行符)。

pdsyw@pdsyw-PC:~/Desktop$ awk 'BEGIN {ORS=", "} {print $1}' pdsyw.txt

将输出的每条记录用逗号和空格分隔。

6.内置函数

awk支持许多常用的内置函数,包括数学、字符串和时间处理函数。

字符串函数:

length:返回字符串长度。

pdsyw@pdsyw-PC:~/Desktop$ awk '{print $2, length($2)}' pdsyw.txt

输出每个姓名及其长度。

substr:截取字符串。

pdsyw@pdsyw-PC:~/Desktop$ awk '{print substr($2, 1, 3)}' pdsyw.txt

输出每个姓名的前三个字符。

tolower 和 toupper:转换大小写。

pdsyw@pdsyw-PC:~/Desktop$ awk '{print tolower($2), toupper($2)}' pdsyw.txt

输出姓名的小写和大写形式。

数学函数:

int:取整。

pdsyw@pdsyw-PC:~/Desktop$ awk '{print int($3 / 10)}' pdsyw.txt

输出每个分数除以10后的整数部分。

sqrt:计算平方根。

pdsyw@pdsyw-PC:~/Desktop$ awk '{print sqrt($3)}' pdsyw.txt

输出每个分数的平方根。

rand:生成随机数。

pdsyw@pdsyw-PC:~/Desktop$ awk 'BEGIN {print rand()}'

时间函数:

systime:获取当前时间的时间戳。

pdsyw@pdsyw-PC:~/Desktop$ awk 'BEGIN {print systime()}'

strftime:格式化时间。

pdsyw@pdsyw-PC:~/Desktop$ awk 'BEGIN {print strftime("%Y-%m-%d %H:%M:%S", systime())}'

7.多模式匹配

可以在awk中使用多个模式进行匹配,每个模式有不同的动作。

pdsyw@pdsyw-PC:~/Desktop$ awk '$3 > 90 {print $2 " 成绩优秀"} $3 < 80 {print $2 " 需要努力"}' pdsyw.txt

当分数大于90时,输出“成绩优秀”。

当分数小于80时,输出“需要努力”。

8.计算和统计

统计总和:

pdsyw@pdsyw-PC:~/Desktop$ awk '{sum += $3} END {print "总分:", sum}' pdsyw.txt

计算第三列(分数)的总和。

计算平均值:

pdsyw@pdsyw-PC:~/Desktop$ awk '{sum += $3} END {print "平均分:", sum/NR}' pdsyw.txt

计算分数的平均值。

查找最大值和最小值:

pdsyw@pdsyw-PC:~/Desktop$ awk 'NR == 1 {max = min = $3} $3 > max {max = $3} $3 < min {min = $3} END {print "最高分:", max, "最低分:", min}' pdsyw.txt

查找分数中的最大值和最小值。

9.BEGIN 和 END 块

BEGIN:在处理文件之前执行一次。

END:在处理文件之后执行一次。

pdsyw@pdsyw-PC:~/Desktop$ awk 'BEGIN {print "学生成绩"} {print $2, $3} END {print "处理完毕"}' pdsyw.txt

输出结果包含了“学生成绩”和“处理完毕”的标识。

10.示例总结

条件输出:

pdsyw@pdsyw-PC:~/Desktop$ awk '$3 >= 85 {print $2 " 成绩优异"}' pdsyw.txt

分数统计和求平均:

pdsyw@pdsyw-PC:~/Desktop$ awk '{sum += $3; count++} END {print "平均分:", sum/count}' pdsyw.txt

处理带特定分隔符的文件:

pdsyw@pdsyw-PC:~/Desktop$ awk -F ':' '{print $1, $3}' /etc/passwd

通过本文的介绍,大家应该已经掌握了awk命令的基本用法及其强大的数据处理功能。awk在Linux系统中作为三剑客之一,不仅能够快速提取和筛选数据,还可以灵活地应用到各种场景中,极大提升工作效率。如果您觉得这篇文章对您有帮助,别忘了分享、转发,并记得点个关注和在看!感谢大家的阅读,我们下次再见!

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

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

相关文章

操作系统概念(一)——IOMMU学习

系列文章目录 提示&#xff1a;本系列主要记录工作过程中遇到的操作系统基础概念以及工作原理 第一章 操作系统之IOMMU 文章目录 系列文章目录1. 设备访问内存的几种主要方式1.1 传统的 I/O 访问&#xff08;程序控制 I/O&#xff09;1.2 直接内存访问&#xff08;DMA&#xf…

计算机网络:网络层 —— IP 多播技术

文章目录 基本概念IP多播地址和多播组 IP多播的类型硬件多播将IPv4多播地址映射为多播MAC地址 基本概念 多播&#xff08;Multicast&#xff0c;也称为组播&#xff09;是一种实现“一对多”通信的技术&#xff0c;允许一台或多台主机&#xff08;多播源&#xff09;发送单一数…

windows运行ffmpeg的脚本报错:av_ts2str、av_ts2timestr、av_err2str => E0029 C4576

问题描述 我目前的环境是&#xff1a; 编辑器&#xff1a; Microsoft Visual Studio Community 2022 (64 位) 运行的脚本是ffmpeg自带的remux样例&#xff0c;只不过我想用c语言执行这个样例。在执行的过程中报错如下图&#xff1a; C4576 后跟初始值设定项列表的带圆括…

翻译工具开发技术笔记:《老挝语翻译通》app支持语音识别翻译功能,怎么提高语音识别的准确度呢?

《老挝语翻译通》app是一款专为老挝语翻译设计的免费工具&#xff0c;支持文本翻译、老挝文OCR文字识别提取、文字转语音。这款工具以其技术优势和用户友好的界面&#xff0c;为用户提供了便捷的老挝语翻译体验。 技术特点 文本翻译&#xff1a;支持双语输入&#xff0c;提供精…

Linux系统每日定时备份mysql数据

一、创建存储脚本的文件夹 创建文件夹&#xff0c;我的脚本放在/root/dbback/mysql mkdir ... cd /root/dbback/mysql 二、编写脚本 vi backup_mysql.sh 复制脚本内容 DB_USER"填写用户名" DB_PASSWORD"填写密码" DB_NAME"数据库名称" # …

MySQL基础-单表查询

语法 select [distinct] 列名1&#xff0c;列名2 as 别名... from数据表名 where组前筛选 group by分组字段 having组后筛选 order by排序的列 [asc | desc] limit 起始索引&#xff0c;数据条数 测试数据 # 建测试表 create table products (id int primary key a…

【Linux】Linux管道揭秘:匿名管道如何连接进程世界

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 &#x1f308;C专栏&#xff1a;C 文章目录 1.什么是管道 &#xff1f;2. 管道的类型2.1 匿…

前端学习Day13 CSS盒子的定位(固定定位篇“附练习”)

一、固定定位 固定定位 &#xff08;position:fixed&#xff09;其实是绝对定位的子类别&#xff0c;一个设置了 position:fixed 的元素是相对于视窗固定的&#xff0c;就算页面文档发生了滚动&#xff0c;它也会一直待在相同的地方。 ⚠️&#xff1a;固定定位会脱离文档流。…

Linux云计算 |【第五阶段】CLOUD-DAY9

主要内容&#xff1a; Metrics资源利用率监控、存储卷管理&#xff08;临时卷ConfitMap、EmptyDir、持久卷HostPath、NFS(PV/PVC)&#xff09; 一、Metrics介绍 metrics是一个监控系统资源使用的插件&#xff0c;可以监控Node节点上的CPU、内存的使用率&#xff0c;或Pod对资…

BM25:最佳匹配 ,文本相关性评分算法

目录 BM25:最佳匹配 一、BM25算法原理 二、BM25算法的应用场景 三、BM25算法的举例说明 BM25:最佳匹配 BM25(Best Matching 25)是一种在信息检索领域中广泛使用的文本相关性评分算法。它基于概率模型,考虑了词频(Term Frequency,TF)、逆文档频率(Inverse Documen…

论文阅读笔记:Image Processing GNN: Breaking Rigidity in Super-Resolution

论文阅读笔记&#xff1a;Image Processing GNN: Breaking Rigidity in Super-Resolution 1 背景2 创新点3 方法4 模块4.1 以往SR模型的刚性4.2 图构建4.2.1 度灵活性4.2.2 像素节点灵活性4.2.3 空间灵活性 4.3 图聚合4.4 多尺度图聚合模块MGB4.5 图聚合层GAL 5 效果5.1 和SOTA…

【游戏引擎之路】登神长阶(十二)——DirectX11教程:If you‘re going through hell, keep going!

【游戏引擎之路】登神长阶&#xff08;十二&#xff09;——DirectX11教程&#xff1a;If youre going through hell, keep going! 2024年 5月20日-6月4日&#xff1a;攻克2D物理引擎。 2024年 6月4日-6月13日&#xff1a;攻克《3D数学基础》。 2024年 6月13日-6月20日&#x…

编写虚拟的GPIO控制器的驱动程序:和pinctrl的交互使用

往期内容 本专栏往期内容&#xff1a; Pinctrl子系统和其主要结构体引入Pinctrl子系统pinctrl_desc结构体进一步介绍Pinctrl子系统中client端设备树相关数据结构介绍和解析inctrl子系统中Pincontroller构造过程驱动分析&#xff1a;imx_pinctrl_soc_info结构体Pinctrl子系统中c…

toolkit二次开发学习之程序集(ProAsmcomp)和装配体组件路径对象(ProAsmcomppath)

程序集ProAsmcomp可以理解为装配体组件对象。 对象ProAssembly是ProSolid的一个实例&#xff0c;并共享相同的声明。因此&#xff0c;ProAssembly对象可以作为适用于装配体的任何ProSolid和ProMdl函数的输入。特别是&#xff0c;因为你可以使用函数ProSolidFeatVisit()来遍历特…

【启程Golang之旅】深入理解 Protocol Buffers 及其应用

如果你是 Go 语言的开发者&#xff0c;理解如何在 Go 中使用 Protobuf&#xff0c;将帮助你大幅提升数据传输的效率&#xff0c;并实现更高性能的系统设计。 本篇文章将深入探讨 Go 语言中使用 Protobuf 的基础知识、常见应用以及最佳实践&#xff0c;带你一步步了解如何在项目…

Intent介绍#1

Intent 它是Android里非常重要的角色&#xff0c;基本上是核心人物。 能做的 startActivity --> 启动activitybroadcastIntent -> BroadcastContext.startService(Intent) Context.bindService(Intent, BindServiceFlags, Executor, ServiceConnection) -> Service…

鸿蒙开发案例:七巧板

【1】引言&#xff08;完整代码在最后面&#xff09; 本文介绍的拖动七巧板游戏是一个简单的益智游戏&#xff0c;用户可以通过拖动和旋转不同形状的七巧板块来完成拼图任务。整个游戏使用鸿蒙Next框架开发&#xff0c;利用其强大的UI构建能力和数据响应机制&#xff0c;实现了…

(61)使用LMS算法估计线性预测器并计算估计误差的MATLAB仿真

文章目录 前言一、仿真说明二、仿真代码三、仿真结果1.LMS自适应滤波器权向量更新曲线2.LMS自适应滤波器算法学习曲线3.期望信号与LMS自适应滤波器输出信号 前言 本文介绍了LMS自适应滤波器对线性预测器系统权系数的估计&#xff0c;进行100次独立实验&#xff0c;计算平均估计…

313页电力集团大数据应用支撑平台技术支撑服务项目技术投标方案

▲关注智慧方案文库&#xff0c;学习9000多份最新解决方案&#xff0c;其中 PPT、WORD超过7000多份 &#xff0c;覆盖智慧城市多数领域的深度知识社区&#xff0c;稳定更新4年&#xff0c;日积月累&#xff0c;更懂行业需求。 313页Word大型电力集团大数据应用支撑平台 技术支…

6款IntelliJ IDEA插件,让Spring和Java开发如虎添翼

文章目录 1、SonarLint2、JRebel for IntelliJ3、SwaggerHub插件4、Lombok插件5、RestfulTool插件6、 Json2Pojo插件7、结论 对于任何Spring Boot开发者来说&#xff0c;两个首要的目标是最大限度地提高工作效率和确保高质量代码。IntelliJ IDEA 是目前最广泛使用的集成开发环境…