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.hqwc.cn/news/439195.html

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

相关文章

短视频界的变革者:上海 AI lab 发布 Vlogger,几句话生成分钟级视频

现如今,vlog 已经成为我们日常生活的重要组成部分。无论是看视频学习休闲、记录珍贵瞬间还是分享生活见闻,视频已经成为人们表达创意和观点的独特媒介。 然而,与几秒钟的短视频不同,要创作出引人入胜、生动有趣的长视频&#xff…

微信积分系统怎么做_开启用户忠诚度之门

积分系统:开启用户忠诚度之门 在数字化时代,积分系统已经成为了企业与消费者之间互动的桥梁。它不仅是一种奖励机制,更是提升用户忠诚度、促进消费的重要手段。本文将深入探讨如何将积分系统作为主题,撰写一篇高质量的营销软文&a…

数据结构--顺序表的基本操作[王道]

截图来自王道数据结构公开课 目录 1.插入操作 代码 时间复杂度分析 2.删除操作 代码 时间复杂度分析 3.按值寻找(顺序查找) 代码 时间复杂度 4.按位寻找(按序号查找) 代码 快速回顾顺序表的定义以及特点:数据结构-顺序表的实现 [王道]-CSDN博客 本篇博…

二、防御保护---防火墙基础知识篇

二、防御保护---防火墙基础知识篇 一、什么是防火墙二、防火墙的发展史1.包过滤防火墙(一个严格的规则表)2.应用代理防火墙(每个应用添加代理)3.状态检测防火墙(首次检查建立会话表)3.入侵检测系统(IDS)-----网络摄像头4.入侵防御系统(IPS)-----抵御2-7层已知威胁5.防病毒网关(…

Unity中使用Ultraleap的InteractionButton组件

本节在上一节基础上进行,上一小结参考如下: Unity中创建Ultraleap 3Di交互项目 本节工程文件如下: Unity中使用Ultraleap的InteractionButton组件 本节结构有所更改,主要是参考官方示例结构进行重新调整,和上一小节相…

wordpress找不回密码怎么办?4种方法设置新密码

有些WordPress站长太久不登录后台了,所以就忘记了管理员登录密码,这种情况我们应该怎么找回密码呢?或者设置一个新密码呢?下面boke112百科就跟大家分享4种方法设置WordPress新密码。 方法一、登录页面的“忘记密码?”…

Shell中正则表达式

1.正则表达式介绍 1、正则表达式---通常用于判断语句中,用来检查某一字符串是否满足某一格式 2、正则表达式是由普通字符与元字符组成 3、普通字符包括大小写字母、数字、标点符号及一些其他符号 4、元字符是指在正则表达式中具有特殊意义的专用字符&#xff0c…

Hack The Box-Pov

信息收集&端口利用 先使用nmap对主机进行端口扫描 nmap 10.10.11.251只开放了80端口 访问网站后发现没有什么功能点,尝试目录扫描 并没有什么能够利用的点 使用gobuster进行子域名扫描 gobuster dns -d pov.htb -w /usr/share/wordlists/seclists/Discovery/DNS/subdo…

Vue之初识Vue CLI 脚手架

Vue CLI 是Vue 官方提供的一个全局命令工具 可以帮助我们快速创建一个开发Vue项目的标准化基础架子。【集成了webpack配置】 脚手架有什么好处? 1.开箱即用,零配置 2.内置 babel 等工具 3.标准化 使用步骤: 1.全局安装(一次):yarn globaladd vue/cli …

自然语言处理(NLP)技术使用

自然语言处理(NLP)技术使用 以下是一些自然语言处理(NLP)技术的例子:以上只是一些NLP技术的例子,还有许多其他的技术和应用,如文本分类、文本生成、问答系统等。NLP技术的发展正逐渐改变人们与计…

LeetCode.209. 长度最小的子数组

题目 题目链接 分析 本题的题意就是让我们找最短的子数组和 > target 的子数组的长度。 首先最能想到的就是暴力方法,外层循环以数组每一个元素都作为起点,内存循环累加元素,当大于等于 target 的时候记录当前元素个数,更新…

DL/T645、IEC104转MQTT网关BE113

随着电力系统信息化建设和数字化转型的进程不断加速,对电力能源的智能化需求也日趋增强。健全稳定的智慧电力系统能够为工业生产、基础设施建设以及国防建设提供稳定的能源支持。在此背景下,高性能的工业电力数据传输解决方案——协议转换网关应运而生&a…