首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用awk对数据进行分组

awk 是一个强大的文本处理工具,特别适用于处理结构化数据(如 CSV 文件)。你可以使用 awk 对数据进行分组和聚合。以下是一些常见的场景和示例,展示如何使用 awk 对数据进行分组。

示例数据

假设你有一个名为 data.txt 的文件,内容如下:

代码语言:javascript
复制
Alice  Sales  200
Bob    Sales  150
Alice  Marketing  300
Bob    Marketing  250
Charlie Sales  100
Charlie Marketing  200

按列分组并求和

假设你想按第二列(部门)分组,并对第三列(销售额)求和。

代码语言:javascript
复制
awk '{arr[$2] += $3} END {for (i in arr) print i, arr[i]}' data.txt

解释:

  • {arr[$2] += $3}:使用数组 arr,键为第二列的值,值为第三列的累加和。
  • END {for (i in arr) print i, arr[i]}:在处理完所有行后,遍历数组并打印结果。

输出:

代码语言:javascript
复制
Sales 450
Marketing 750

按多列分组并求和

假设你想按第一列(姓名)和第二列(部门)分组,并对第三列(销售额)求和。

代码语言:javascript
复制
awk '{arr[$1, $2] += $3} END {for (i in arr) {split(i, keys, SUBSEP); print keys[1], keys[2], arr[i]}}' data.txt

解释:

  • {arr[$1, $2] += $3}:使用数组 arr,键为第一列和第二列的组合,值为第三列的累加和。
  • END {for (i in arr) {split(i, keys, SUBSEP); print keys[1], keys[2], arr[i]}}:在处理完所有行后,遍历数组并打印结果。split(i, keys, SUBSEP) 用于将组合键拆分回原始的列值。

输出:

代码语言:javascript
复制
Alice Sales 200
Alice Marketing 300
Bob Sales 150
Bob Marketing 250
Charlie Sales 100
Charlie Marketing 200

按列分组并计算平均值

假设你想按第二列(部门)分组,并计算第三列(销售额)的平均值。

代码语言:javascript
复制
awk '{arr[$2] += $3; count[$2]++} END {for (i in arr) print i, arr[i]/count[i]}' data.txt

解释:

  • {arr[$2] += $3; count[$2]++}:使用数组 arr 累加第三列的值,并使用数组 count 计数。
  • END {for (i in arr) print i, arr[i]/count[i]}:在处理完所有行后,遍历数组并打印结果,计算平均值。

输出:

代码语言:javascript
复制
Sales 150
Marketing 250

按列分组并找出最大值

假设你想按第二列(部门)分组,并找出第三列(销售额)的最大值。

代码语言:javascript
复制
awk '{if ($3 > max[$2]) max[$2] = $3} END {for (i in max) print i, max[i]}' data.txt

解释:

  • {if ($3 > max[$2]) max[$2] = $3}:使用数组 max,存储每个部门的最大值。
  • END {for (i in max) print i, max[i]}:在处理完所有行后,遍历数组并打印结果。

输出:

代码语言:javascript
复制
Sales 200
Marketing 300

按列分组并找出最小值

假设你想按第二列(部门)分组,并找出第三列(销售额)的最小值。

代码语言:javascript
复制
awk '{if (min[$2] == "" || $3 < min[$2]) min[$2] = $3} END {for (i in min) print i, min[i]}' data.txt

解释:

  • {if (min[$2] == "" || $3 < min[$2]) min[$2] = $3}:使用数组 min,存储每个部门的最小值。
  • END {for (i in min) print i, min[i]}:在处理完所有行后,遍历数组并打印结果。

输出:

代码语言:javascript
复制
Sales 100
Marketing 200
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

共50个视频
动力节点-【CRM客户管理系统】SSM框架项目实战教程-1
动力节点Java培训
这套教程是动力节点最新录制的CRM项目,课程主要针对核心的客户关系管理业务功能进行实现,让你能够深层掌握主流SSM框架、Linux操作系统下部署项目、数据库设计原则和技巧、数据如何通过图表在页面展示、Java对excel文件的处理,学会使用项目管理工具Maven、版本控制工具Git,以及缓存在项目中的运用熟悉前端开发技术及常见的特效等。 通过课程可以了解项目开发流程及项目开发各阶段主要文档及产出物
共50个视频
动力节点-【CRM客户管理系统】SSM框架项目实战教程-2
动力节点Java培训
这套教程是动力节点最新录制的CRM项目,课程主要针对核心的客户关系管理业务功能进行实现,让你能够深层掌握主流SSM框架、Linux操作系统下部署项目、数据库设计原则和技巧、数据如何通过图表在页面展示、Java对excel文件的处理,学会使用项目管理工具Maven、版本控制工具Git,以及缓存在项目中的运用熟悉前端开发技术及常见的特效等。 通过课程可以了解项目开发流程及项目开发各阶段主要文档及产出物
共50个视频
动力节点-【CRM客户管理系统】SSM框架项目实战教程-3
动力节点Java培训
这套教程是动力节点最新录制的CRM项目,课程主要针对核心的客户关系管理业务功能进行实现,让你能够深层掌握主流SSM框架、Linux操作系统下部署项目、数据库设计原则和技巧、数据如何通过图表在页面展示、Java对excel文件的处理,学会使用项目管理工具Maven、版本控制工具Git,以及缓存在项目中的运用熟悉前端开发技术及常见的特效等。 通过课程可以了解项目开发流程及项目开发各阶段主要文档及产出物
共18个视频
动力节点-【CRM客户管理系统】SSM框架项目实战教程-4
动力节点Java培训
这套教程是动力节点最新录制的CRM项目,课程主要针对核心的客户关系管理业务功能进行实现,让你能够深层掌握主流SSM框架、Linux操作系统下部署项目、数据库设计原则和技巧、数据如何通过图表在页面展示、Java对excel文件的处理,学会使用项目管理工具Maven、版本控制工具Git,以及缓存在项目中的运用熟悉前端开发技术及常见的特效等。 通过课程可以了解项目开发流程及项目开发各阶段主要文档及产出物
共63个视频
《基于腾讯云EMR搭建离线数据仓库》
腾讯云开发者社区
本项目由尚硅谷大数据研究院与腾讯云团队共同合作研发,依托国内电商巨头的真实业务场景,基于各大互联网企业对于腾讯云EMR架构体系的需求,将整个电商的离线数据仓库体系搭建在腾讯云架构上。全方面完成了整个离线数据仓库架构的海量数据采集、存储、计算、可视化展示,整个业务流程全部搭建在腾讯云服务器上并且全部使用腾讯云EMR的服务组件,将各腾讯云EMR服务组件充分进行联动。
领券