You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash批量计算CSV文件各数据列的求和值?

批量计算CSV多列求和的Awk解决方案

当然可以实现批量列求和!不用单独处理每一列,用Awk就能一次性完成所有列的计算,完全符合你的需求。

核心实现代码

下面是一个通用的Awk脚本,不管你的CSV有多少列(只要从第二列开始是数值),都能自动计算每列的总和:

BEGIN {
    FS = OFS = ","  # 设置输入输出的分隔符为逗号
}

# 第一行时记录总列数,避免重复计算
NR == 1 {
    total_cols = NF
}

# 遍历每一行的第2到最后一列,累加求和
{
    for (col = 2; col <= total_cols; col++) {
        column_sum[col] += $col
    }
}

# 最后输出结果行
END {
    printf "SUM"  # 先输出结果行的表头
    for (col = 2; col <= total_cols; col++) {
        printf "%s%d", OFS, column_sum[col]  # 用逗号分隔每列的和
    }
    print ""  # 最后换行,保证输出格式正确
}

使用方法

  1. 把上面的代码保存为sum_columns.awk文件
  2. 运行命令处理你的CSV文件(假设文件名为test.txt):
awk -f sum_columns.awk test.txt

或者你也可以直接用一行命令执行,不用保存脚本:

awk 'BEGIN{FS=OFS=","} NR==1{total_cols=NF} {for(col=2;col<=total_cols;col++) column_sum[col]+=$col} END{printf "SUM"; for(col=2;col<=total_cols;col++) printf "%s%d",OFS,column_sum[col]; print ""}' test.txt

结果验证

用你提供的输入CSV:

ID_X,1,2,7,8
ID_Y,6,9,3,5
ID_Z,7,12,4,4

执行后会输出:

SUM,14,23,14,17

完全匹配你的预期结果!

额外注意事项

  • 如果你的CSV中存在空值或者非数字内容,Awk会默认把它们当作0处理。如果需要忽略这些无效值,可以在累加时加个判断:
    if ($col ~ /^[0-9.]+$/) {  # 只处理数字(包括小数)
        column_sum[col] += $col
    }
    
  • 这个脚本是通用的,不管你的CSV有多少列,只要从第二列开始是需要求和的数值,都能正常工作。

内容的提问来源于stack exchange,提问作者Kuav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:55:57