awk命令使用方法

简介
awk 是一种强大的文本处理工具,可以用于处理结构化的文本数据。它可以根据指定的模式和动作来筛选、处理和格式化文本。
下面是一些常见的 awk 命令使用方法。

详细介绍

基本语法

awk 'pattern { action }' filename

其中,pattern 是用于匹配文本的条件表达式,action 是在匹配到的文本上执行的动作,filename 是要处理的文件名(可以省略,默认为标准输入)。
显示整行

awk '{ print }' filename

这个命令将显示文件中的每一行。
按列显示

awk '{ print $1, $2 }' filename

这个命令将按空格或制表符分隔文本,然后显示每一行的第一个和第二个列。
使用分隔符定制列

awk -F',' '{ print $1, $2 }' filename

这个命令将使用逗号作为分隔符,然后显示每一行的第一个和第二个列。
使用条件过滤行

awk '/pattern/ { print }' filename

这个命令将只显示匹配到 pattern 的行。
使用条件过滤并处理列

awk '/pattern/ { print $1, $2*2 }' filename

这个命令将只处理匹配到 pattern 的行,并显示每一行的第一个列和第二个列乘以 2 的结果。
使用内置变量

awk '{ print NR, $0 }' filename

这个命令将显示行号(NR)和每一行内容。
使用条件分支:

awk '{ if ($3 > 10) print $1, $2 }' filename

这个命令将按照条件分支,只显示第三列大于 10 的行的第一列和第二列。
显示包含特定单词的行

awk '/word/' filename

这个命令会输出包含"word"的行。
计算并显示文件中数字的总和:

awk '{ total += $1 } END { print "Sum: " total }' filename

这个命令会计算文件中第一列数字的总和,并在处理完所有行后输出结果。
找出文件中最长的行

awk 'length > max_length { max_length = length; longest_line = $0 } END { print longest_line }' filename

这个命令会找出文件中最长的一行,并输出该行的内容。

脚本实战

接下来,让我们创建一个简单的 awk 脚本示例。假设我们有一个名为 example.txt 的文本文件,内容如下:

Alice 25
Bob 30
Charlie 28
Diana 22

我们可以使用 awk 脚本来计算年龄的平均值。创建名为 age_avg.awk 的文件,内容如下:

# age_avg.awk
{sum += $2
}END {avg = sum / NRprint "Average age is " avg
}

然后,我们可以在命令行中运行以下命令来执行该脚本并对文件进行处理:

awk -f age_avg.awk example.txt

这将输出:

Average age is 26.25

这段代码是一个简单的 awk 脚本,用于计算给定文件中包含的数字列的平均值。让我解释一下这个脚本的工作原理:
{ sum += $2 }:
这是一个动作部分,它告诉 awk 对于每一行(由默认模式匹配),将第二列的值加到 sum 变量中。
END { avg = sum / NR; print "Average age is " avg }:
这部分在 awk 处理完所有输入行后执行。在这里,我们计算平均值并输出结果。
avg = sum / NR:计算平均值,即所有第二列数字的总和除以输入行的数量(NR 表示输入行的数量)。
print "Average age is " avg:打印计算得到的平均值。
通过这个例子,我们定义了一个处理模式和动作的 awk 脚本,用于计算文件中第二列数字的平均值,如图:
在这里插入图片描述
示例二:
假设有一个包含学生成绩的文本文件,格式如下:

vim grades.txt
Alice 90
Bob 85
Charlie 92
Diana 78

我们想要创建一份报告,包含每个学生的成绩统计信息和总体班级平均成绩。创建一个名为 grade_report.awk 的文件,内容如下:

# grade_report.awk# BEGIN 部分在处理输入之前执行,用于打印报告的标题和表头
BEGIN {print "----- Grade Report -----"  # 打印报告标题print "Name\tGrade"               # 打印表头print "------------------------"
}# 主要处理部分,对每一行进行操作
{name = $1          # 存储学生姓名grade = $2         # 存储学生成绩grades[name] += 1  # 统计每个学生的成绩次数total[name] += grade  # 统计每个学生的所有成绩总和
}# END 部分在处理输入之后执行,用于生成最终的报告
END {print "------------------------"print "Name\t\tAverage Grade"  # 打印平均成绩表头print "------------------------"# 遍历每个学生的成绩统计信息for (name in grades) {avg_grade = total[name] / grades[name]  # 计算平均成绩printf "%-10s\t%.2f\n", name, avg_grade  # 打印学生姓名和平均成绩}num_students = length(grades)  # 获取学生总数sum_grades = 0  # 初始化总成绩总和# 计算班级所有学生总成绩for (name in total) {sum_grades += total[name]}class_avg = sum_grades / num_students  # 计算班级平均成绩print "------------------------"printf "Class Average:\t%.2f\n", class_avg  # 打印班级平均成绩
}

然后,在命令行中运行以下命令来执行该脚本并对给定的成绩文件进行处理:

awk -f grade_report.awk grades.txt

现在来详细解释这个脚本的各个部分
BEGIN: 这部分包含在处理输入之前执行的代码。在这里,打印报告的标题和表头,为后续的处理做准备。
主要处理部分:
对于每一行,提取学生姓名和成绩,并使用数组 grades 统计每个学生的成绩次数,使用数组 total 统计每个学生的所有成绩总和。
END: 这部分包含在处理输入之后执行的代码。在这里,打印每个学生的平均成绩,然后计算所有学生的总成绩并计算班级的平均成绩。
遍历每个学生的成绩统计信息,计算每个学生的平均成绩并打印出来。
然后,计算班级中所有学生的总成绩,并计算出整个班级的平均成绩。
这将输出一个包含每个学生的平均成绩以及班级的平均成绩的报告,类似于以下内容

----- Grade Report -----
Name      Grade
------------------------
------------------------
Name            Average Grade
------------------------
Alice       90.00
Bob         85.00
Charlie     92.00
Diana       78.00
------------------------
Class Average: 86.25

在这个例子中,使用了 awk 的数组功能来跟踪每个学生的成绩和计数,并在最后计算了总体班级的平均成绩。
在这里插入图片描述
#######################################################################################################################################################

今日推荐

小说:《武德充沛》
小说简介:
我姓武,大家都叫我小武。
兄弟你听好了,下面是我的一些经验之谈——
跟龙族打的时候别听它说什么,只管打,一直打到它死为止;
揍妖精比较麻烦一点,最好别让它看见你,要打黑枪;
搞兽人就是一个字,裸绞!
魔鬼敢来找麻烦,那就死命掰它的角,它一定跪;
好了,我现在要去酒吧打架,更多简介内容等我回来再写。
在这里插入图片描述

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

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

相关文章

微软 Power Apps Canvas App 画布应用将上传的附件转化为base64编码操作

微软 Power Apps Canvas App 画布应用将上传的附件结合Power Automate转化为base64编码操作 在使用canvas app的过程中,我们有时需要将上传的文件转换为base64存入数据库或者,调用外部接口传参,那么看下如何将文件转化为base64编码格式。 首先…

【数据分析】numpy基础第三天

前言 本文只会讲解最常用的加、减、乘、除,点乘(或叫矩阵乘法)、还有广播机制。 本文代码 链接提取码:1024 第1部分:基础数学计算 使用NumPy进行基本的数学运算是十分直观和简单的。下面我们将展示一些基本的加、…

笨蛋总结JVM

笨蛋总结JVM 由于Java语言将自己的内存控制权交给了虚拟机,所以需要了解虚拟机的运行机制 (主要用于回顾JVM) 笨蛋总结JVM 笨蛋总结JVM1.运行时数据区域线程私有区域程序计数器Java虚拟机栈本地方法栈 线程共享区域堆方法区 1.2程序计数器…

键盘上Ins键的作用

前几天编写文档时,发现一个问题:插入内容时,输入的字符将会覆盖光标位置后的字符。原来是按到了键盘上的 Ins键,解决方法是:再按一次 Ins键(Ins键如果独立作为一键时,否则使用 “Fn Ins”组合键…

Sphinx的原理详解和使用

一、Sphinx介绍 1.1 简介 Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎。意图为其他应用提供高速、低空间占用、高结果 相关度的全文搜索功能。Sphinx可以非常容易的与SQL数据库和脚本语言集成。当前系统内置MySQL和PostgreSQL 数据库数据源的支持,也…

限时回归!!!3D版《空洞骑士》!!!

空洞骑士是一款基于横板平台跳跃的传统风格2D动作冒险游戏。庞大的游戏世界交错相通,玩家控制小虫子去探索幽深黑暗的洞穴,成为了一代人茶余饭后的惦念,深受广大玩家们的喜爱。 这类平台跳跃游戏一般是游戏开发初学者以及独立游戏开发者们比…

【DRAM存储器十八】DDR3介绍

👉个人主页:highman110 👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 参考资料:《镁光DDR3数据手册》 、《JESD79-3E》 最近忙于工作&#xff0…

Linux使用匿名管道实现进程池得以高效通信

🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:Nonsense—Sabrina Carpenter 0:50━━━━━━️💟──────── 2:43 🔄 ◀️ ⏸ ▶️ …

python基础四------完结(概念在下面,代码看不懂了再看)

# a_list [1,2,3,4,5] # # print(a_list)# 根据下标来删除列表中的元素 # 爬取的数据中 有个别的数据 是我们不想要的 那么我们就可以通过下标的方式来删除 # del a_list[2] # print(a_list)# b_list [1,2,3,4,5] # print(b_list) # pop是删除列表中的最后一个元素 # b_list.…

Kali 基本命令大全

一、系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件- (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 cat /proc/cpu…

AP5216 平均电流型LED降压恒流驱动IC 手电筒汽车摩托车灯芯片

产品描述 AP5216 是一款 PWM工作模式, 高效率、外围简单、内置功率管,适用于5V~100V输入的高精度降压 LED 恒流驱动芯片。输出最大功率可达9W,最大电流 1.0A。AP5216 可实现全亮/半亮功能切换,通过MODE 切换:全亮/半亮…

SAP HANA 报错信息,如何根据报错关键词去进行处理

HANA建模其实上手会比较快,基本会SQL就可以进行开发。 在实际开发中,难点一个是建模思路,另外一个则是建模中报错的处理。 现在将HANA中报错进行一个整理,这里的并不是完整的报错信息,大家可以根据关键词进行查看。 …

ChatGPT更新了Mention功能,集结若干GPTs作战,AI智能体的心智入口;向量数据库的挑战和未来

🦉 AI新闻 🚀 ChatGPT更新了Mention功能,集结若干GPTs作战,AI智能体的心智入口 摘要:OpenAI在ChatGPT中引入了一个新功能,允许用户在聊天时任意一个GPTs(即ChatGPT最新推出的AI Agent 智能应用…

scrapy的入门使用

1 安装scrapy 命令: sudo apt-get install scrapy或者: pip/pip3 install scrapy2 scrapy项目开发流程 创建项目: scrapy startproject mySpider生成一个爬虫: scrapy genspider itcast itcast.cn提取数据:     根据网站结构在spider中实现数据采集相关内…

C/C++ - 函数进阶(C++)

目录 默认参数 函数重载 内联函数 函数模板 递归函数 回调函数 默认参数 定义 默认参数是在函数声明或定义中指定的具有默认值的函数参数。默认参数允许在调用函数时可以省略对应的参数,使用默认值进行替代。 使用 默认参数可以用于全局函数和成员函数。默认参…

C语言KR圣经笔记 5.12 复杂声明

5.12 复杂声明 C 语言有时会因为声明的语法而受到谴责,特别是涉及函数指针的声明语法。语法试图使声明和使用一致;在简单的情况下它的效果不错,但在更复杂的情况下会让人困惑,因为声明不能从左往右读,而且括号被过度使…

Linux文本三剑客---sed经典案例

Sed介绍: sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理…

Mybatis-plus原生pages分页未生效的解决方案

文章目录 前言原因1、Mybatis Plus版本的问题2、Mapper.xml文件中SQL语句格式问题3、Mybatis Plus默认分页拦截器问题4、分页参数传参问题5、分页配置的问题 解决方案1、升级对应的Mybatis-plus版本分页插件配置问题3、自定义分页拦截器4、正确的参数5、不同版本的配置文件3.4.…

Hugging Face创始人分享:企业如何在ChatGPT浪潮下实现战略布局

Hugging Face创始人兼首席执行官 Clem Delangue在IBM一年一度的 THINK大会中研讨了当前人工智能发展趋势,特别是ChatGPT模型以及其对行业的影响。他的演讲还涉及到一个关键的议题,在ChatGPT这样的通用模型出现后,企业如何在人工智能领域找到自…

QR 分解cpu程序

1. 代码 Makefile EXE : hello_qrSRC_QR qr_main.c qr_func.c $(EXE): $(SRC_QR)gcc $^ -o $ -lm.PHONY: clean clean:-rm -rf $(EXE) qr_main.c #include "stdio.h"int maqr(double* a,int m,int n,double* q);int main() {int i,j;static double q[4][4],a[4]…