首页
学习
活动
专区
工具
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
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

1分11秒

如何使用RFID对固定资产进行盘点

4分52秒

18_尚硅谷_Vue项目_使用git对项目进行版本控制.avi

4分39秒

看我如何使用Python对行程码与健康码图片文字进行识别统计

8分54秒

golang教程 go语言基础 51 使用选择排序对切片进行排序 学习猿地

3分20秒

19.尚硅谷_硅谷商城[新]_对ViewPager动画进行美化库的使用.avi

15分10秒

057_尚硅谷_实时电商项目_通过Redis对已经登录的数据进行去重方式1

18分24秒

058_尚硅谷_实时电商项目_通过Redis对已经登录的数据进行去重方式2

1分0秒

如何使用RayData DMS进行一站式数据管理?

14分35秒

090_尚硅谷_实时电商项目_封装向Kafka发送数据工具类并对canal分流进行测试

7分16秒

39_尚硅谷_大数据Spring_使用@AutoWired进行自动装配.avi

1分28秒

JSP医药进销存管理系统myeclipse开发SQLServer数据库web结构java编程

1分48秒

JSP库存管理系统myeclipse开发SQLServer数据库web结构java编程

领券