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

相关·内容

领券