awk
是一个强大的文本处理工具,特别适用于处理结构化数据(如 CSV 文件)。你可以使用 awk
对数据进行分组和聚合。以下是一些常见的场景和示例,展示如何使用 awk
对数据进行分组。
假设你有一个名为 data.txt
的文件,内容如下:
Alice Sales 200
Bob Sales 150
Alice Marketing 300
Bob Marketing 250
Charlie Sales 100
Charlie Marketing 200
假设你想按第二列(部门)分组,并对第三列(销售额)求和。
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]}
:在处理完所有行后,遍历数组并打印结果。输出:
Sales 450
Marketing 750
假设你想按第一列(姓名)和第二列(部门)分组,并对第三列(销售额)求和。
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)
用于将组合键拆分回原始的列值。输出:
Alice Sales 200
Alice Marketing 300
Bob Sales 150
Bob Marketing 250
Charlie Sales 100
Charlie Marketing 200
假设你想按第二列(部门)分组,并计算第三列(销售额)的平均值。
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]}
:在处理完所有行后,遍历数组并打印结果,计算平均值。输出:
Sales 150
Marketing 250
假设你想按第二列(部门)分组,并找出第三列(销售额)的最大值。
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]}
:在处理完所有行后,遍历数组并打印结果。输出:
Sales 200
Marketing 300
假设你想按第二列(部门)分组,并找出第三列(销售额)的最小值。
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]}
:在处理完所有行后,遍历数组并打印结果。输出:
Sales 100
Marketing 200
领取专属 10元无门槛券
手把手带您无忧上云