如何对选项卡文件中的每个列执行累积和连续总和(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
}

}' "input_file">

另一种方法是手动对每一列进行操作。 $4,$5+$4,$6+$5+$4,$7+$6+$5+$4等等,但我认为是一种"肮脏"的方法。

以下awk可能会在这里为您提供帮助。

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

最新更新