AWK CSV Column Aggregation
Aggregate CSV columns with awk: per-group sums, counts, and computed ratios in one pass over streaming input.
Code
#!/usr/bin/env bash
set -euo pipefail
# 输入形态:region,channel,orders,revenue_cents
readonly SAMPLE='eu,web,120,450000
eu,mobile,80,290000
na,web,95,310000
na,mobile,45,150000
apac,web,30,90000'
# 单遍聚合:分组求和与计数
aggregate() {
awk -F',' '
NR > 1 {
orders[$1] += $3
revenue[$1] += $4
count[$1] += 1
total_orders += $3
}
END {
for (region in orders) {
printf "%-6s 订单 %6d 营收 %10d 均单价 %8.0f\n", \
region, orders[region], revenue[region], \
revenue[region] / orders[region]
}
printf "TOTAL 订单 %6d\n", total_orders
}
'
}
echo "$SAMPLE" | aggregate
# 流式管道形态:配合 sort 输出前 N
echo "$SAMPLE" | awk -F',' 'NR > 1 { print $1, $4 }' \
| sort -k2,2nr \
| head -3
# 条件过滤加聚合一步完成
echo "$SAMPLE" | awk -F',' '$3 >= 80 { sum += $4; n++ }
END { if (n > 0) printf "大渠道合计营收: %d(%d 个)\n", sum, n }'
Report a problem with this exampleOpens a pre-filled issue on GitHub.