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 / NR
    print "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 的数组功能来跟踪每个学生的成绩和计数,并在最后计算了总体班级的平均成绩。
在这里插入图片描述
#######################################################################################################################################################
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode: Z 字形变换 + 模拟】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

(自用)learnOpenGL学习总结-高级OpenGL-帧缓冲Framebuffers

我们在之前使用了很多缓冲了:颜色缓冲、深度缓冲、模板缓冲。这些缓冲结合起来叫做帧缓冲, 其实也能从名字理解,每一帧屏幕都需要不断更新画面,对应的缓冲也需要更新。 不过上面这些都是在默认的缓冲里面做的,现在我…

数据建模及可视化解决方案

一、需求背景 1. 数据量的爆炸性增长:随着互联网和物联网技术的发展,我们正处于一个数据爆炸的时代。企业和组织需要有效地管理和利用这些海量数据,而数据建模平台可以帮助他们实现这一目标。 2. 数据多样性和复杂性:数据来源的多样化和复杂性使得数据管理和分析变得更加…

基于 GPU 渲染的高性能空间包围计算

空间包围检测在计算机图形学、虚拟仿真、工业生产等有着广泛的应用。 现代煤矿开采过程中,安全一直是最大的挑战之一。地质空间中存在诸多如瓦斯积聚、地质构造异常、水文条件不利等隐蔽致灾因素,一旦被触发,可能引发灾难性的后果。因此在安…

架构整洁之道-组件构建原则

5 组件构建原则 大型软件系统的架构过程与建筑物修建很类似,都是由一个个小组件组成的。所以,如果说SOLID原则是用于指导我们如何将砖块砌成墙与房间的,那么组件构建原则就是用来指导我们如何将这些房间组合成房子的。 5.1 组件 组件是软件的…

漏洞原理SQL注入 手工注入漏洞

漏洞原理SQL注入 手工注入漏洞 SQL 注入的前置知识 information_schema库information_schema 是mysql5.0以上版本中自带的一个数据库。tables表information_schema库中的tables表中table_schema列(存储数据库名)和table_name列(存储表名&…

慎投!这3本期刊诚信风险高,被警告和风险低的期刊选哪个?

近年来,学术界对学术诚信的关注越来越多,期刊的学术诚信风险也日益受到关注。科睿唯安在今年三月份剔除的35本SCI期刊中,绝大多数涉及学术诚信问题!据官方介绍,其已正式开发了一款AI工具,可以锁定存在学术诚…

R-YOLO

Abstract 提出了一个框架,名为R-YOLO,不需要在恶劣天气下进行注释。考虑到正常天气图像和不利天气图像之间的分布差距,我们的框架由图像翻译网络(QTNet)和特征校准网络(FCNet)组成,…

ES 分词器

概述 分词器的主要作用将用户输入的一段文本,按照一定逻辑,分析成多个词语的一种工具 什么是分词器 顾名思义,文本分析就是把全文本转换成一系列单词(term/token)的过程,也叫分词。在 ES 中,Ana…

部署一个私有化的博客系统

效果 安装 1.创建目录 mkdir /opt/typecho/usr cd /opt/typecho 2.编写配置文件 vim docker-compose.yml 内容如下 version: 3 services:typecho:image: joyqi/typecho:nightly-php7.4-apachecontainer_name: typechorestart: alwaysenvironment:- TYPECHO_SITE_URLhttp:…

大模型应用开发:为产品创建一个AI客服/智能助手

欢迎阅读本系列文章!我将带你一起探索如何使用OpenAI API来开发GPT应用。无论你是编程新手还是资深开发者,都能在这里获得灵感和收获。 本文将继续展示AI助手的开发方式,在OpenAPI中它的名字是Assistants。 什么是Assistants? 在之…

《信息系统项目管理师》备考计划

《信息系统项目管理师》证书价值和作用 信息系统项目管理师证书的价值体现在提升专业知识、助力职业发展、职称评定、技能补贴和人才引进或积分落户等方面。 一方面可以通过系统学习,可以显著提高自己在信息系统项目管理领域的专业水平。方便自己以后向更多的方向…

【思科】 GRE VPN 的实验配置

【思科】GRE VPN 的实验配置 前言报文格式 实验需求配置拓扑GRE配置步骤R1基础配置GRE 配置 ISP_R2基础配置 R3基础配置GRE 配置 PCPC1PC2 抓包检查OSPF建立GRE隧道建立 配置文档 前言 VPN :(Virtual Private Network),即“虚拟专…

路由进阶

文章目录 1.路由的封装抽离2.声明式导航 - 导航链接3.声明式导航-两个类名自定义匹配的类名 4.声明式导航 - 跳转传参查询参数传参动态路传参两种传参方式的区别动态路由参数可选符 5.Vue路由 - 重定向6.Vue路由 - 4047.Vue路由 - 模式设置8.编程式导航 - 两种路由跳转9.编程式…

AttributeError: ‘Plotter‘ object has no attribute ‘topicture‘

在以下网址找到自己的pytorch和cuda版本然后点击进入: https://nvidia-kaolin.s3.us-east-2.amazonaws.com/index.html 下载自己系统和python对应的最新版本 使用pip安装 pip install kaolin-0.14.0-cp38-cp38-linux_x86_64.whl

如何使用Everything随时随地远程访问本地电脑搜索文件

文章目录 前言1.软件安装完成后,打开Everything2.登录cpolar官网 设置空白数据隧道3.将空白数据隧道与本地Everything软件结合起来总结 前言 要搭建一个在线资料库,我们需要两个软件的支持,分别是cpolar(用于搭建内网穿透数据隧道…

力扣日记1.28-【回溯算法篇】93. 复原 IP 地址

力扣日记:【回溯算法篇】93. 复原 IP 地址 日期:2023.1.28 参考:代码随想录、力扣 93. 复原 IP 地址 题目描述 难度:中等 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0&…

项目解决方案:市小区高清视频监控平台联网整合设计方案(上)

目 录 一、项目需求 1.1业务需求 1.2技术需求 1.3 环境要求 1.3.1 硬件要求 1.3.2 技术服务要求 二、系统设计方案 2.1 视频监控平台基础功能设计 2.2 视频资源及联网设备编码与管理设计 2.2.1 全省现有联网视频资源属性 2.2.2 视频资源编码具体格…

超值福利,全是独家特制版软件,功能超凡且完全免费

闲话休提,直接为您呈现四款神仙级别的软件。 1、我的ABC软件工具箱 这款小巧而强大的批量处理办公助手——我的ABC软件工具箱,不仅界面清爽、无弹窗广告,更重要的是,它完全免费!这款工具箱将成为您高效办公的得力助手…

D8: Type com.huazhuokeji.footballpark.BuildConfig is defined multiple times:

D8: Type com.huazhuokeji.footballpark.BuildConfig is defined multiple times: 报错信息如下分析总结 报错信息如下 E:\unityProject\GVoice\Temp\gradleOut\launcher\build\intermediates\project_dex_archive\release\out\com\huazhuokeji\footballpark\BuildConfig.dex:…