如何使用awk按行对多组数据第三列求和并输出指定格式结果
问题原因
你现有的awk命令存在两个核心问题:
- 没有跳过
>开头的分组分隔行,会将分隔行也参与计算 - 逻辑为逐行对当前行所有字段求和输出,没有按对应行号累加两组数据的第三列,也未保留第一列的索引值输出
可行解决方案
使用如下awk命令即可得到预期结果:
/^>/ { line = 0; next } # 匹配到分组分隔行就重置行计数、跳过不处理 { line++ col1[line] = $1 # 存储当前行第一列的索引值 sum[line] += $3 # 按行号累加第三列数值 } END { # 遍历输出结果,数值格式和预期对齐 for(i=1; i<=line; i++) { printf "%.3f %.1f\n", col1[i], sum[i] } }
运行方式
你可以直接用单行命令执行:
awk '/^>/{line=0;next}{line++;col1[line]=$1;sum[line]+=$3}END{for(i=1;i<=line;i++)printf "%.3f %.1f\n",col1[i],sum[i]}' input_file > out_file
该方案不限制每组数据的行数,只要每组数据用>开头的行分隔,都可以正常按对应行累加第三列数值。
内容的提问来源于stack exchange,提问作者manas
相关产品推荐
相关产品推荐

