我有一个类似的表格文件
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