首页 > 解决方案 > 如何对选项卡文件中的每一列进行累积和连续求和(UNIX 环境)

问题描述

我有一个类似的表格文件

Q8VYA50 210     69      2       8       3
Q8VYA50 208     69      1       2       8       3
Q9C8G30 316     182     4       4       7
P335430 657     98      1       10      7

我想做的是应用从第 4 列到 NF 的累积总和,并在每一列中打印该列总和的结果以及前列的原始值(如果有)。因此,所需的输出将是

Q8VYA50 210     69      2       10      13
Q8VYA50 208     69      1       3       11       14
Q9C8G30 316     182     4       8       15
P335430 657     98      1       11      18

我试图通过不同的方式通过 awk 脚本中的 sum 函数来实现,包括指定必须应用累积和的字段的 for 循环。但是,得到的结果是错误的。

Unix(Bash)有什么方法可以正确地做到这一点吗?提前致谢!

这是我尝试做的一种方式@Inian

gawk 'BEGIN {FS=OFS="\t"} {
            for (i=4;i<=NF;i++)
            {
                    sum[i]+=$i; print $1,$2,$3,$i
            }

}' “输入文件”

其他方法是手动为每一列做。$4,$5+$4,$6+$5+$4,$7+$6+$5+$4 等等,但我认为这是一种“种子”方法。

标签: bashunixfor-loopawksum

解决方案


以下awk可能会对您有所帮助。

awk '{for(i=5;i<=NF;i++){$i+=$(i-1)}} 1' OFS="\t"  Input_file

推荐阅读