如何对72列文件中从第4列开始的隔列求和?AWK代码求助
解决AWK按列求和的问题
我来帮你搞定这个问题!你的AWK代码没达到预期效果,主要是两个关键问题:
- 你用了
sum[i]数组来累加,这会把所有行的同一列值加在一起,但你需要的是每行单独计算求和; - 最后直接
print输出了整行,没有按照你想要的格式输出前几列加总和的结果。
正确的AWK代码
按照你的预期输出格式,这段代码可以完美解决问题:
awk '{sum=0; for(i=4; i<=NF; i+=2) sum+=$i; print $1, $2, sum}' infile
代码解释
让我拆解一下这段代码的逻辑:
sum=0:每处理一行前,先把求和变量重置为0,确保每行的计算都是独立的,不会和上一行的结果混在一起;for(i=4; i<=NF; i+=2):从第4列开始,每次步长为2循环,也就是选取第4、6、8……直到最后一列的所有目标列;sum+=$i:把当前循环到的列的值累加到sum变量中;print $1, $2, sum:按照你想要的格式,输出第一列(日期)、第二列,以及计算得到的总和。
验证你的输入
用你提供的测试输入来验证:
- 第一行输入:
20170101 1 1 1.5 2 2 3 3→ 求和:1.5+2+3=6.5→ 输出:20170101 1 6.5 - 第二行输入:
20170101 2 1 2 2 4 3 4→ 求和:2+4+4=10→ 输出:20170101 2 10 - 第三行输入:
20170101 3 1 5 2 3 3 6→ 求和:5+3+6=14→ 输出:20170101 3 14
完全匹配你的预期输出哦!
内容的提问来源于stack exchange,提问作者kelly
相关产品推荐
相关产品推荐

