对 AWK 中同一列的相邻行求和

To sum adjacent lines from the same column in AWK

我有一个文件:

A  1 20 
B  2 21
C  3 22
D  4 23

我必须求第 0-3 行值的总和,然后是第 1 行到第 3 行的总和,最后是第 2 行到第 3 行的总和。最后一个值必须简单地为 0。换句话说,我想要得到一个包含两列的输出文件,其中的值是相邻行的总和,如下所示:

10  86
9   66
7   45
0   0

最后一行必须有两个零作为值。在 AWK 中如何实现?

这可能是您想要的:

$ tac file | awk 'NR==1{ print 0, 0; a=; b=; next} { print a+=, b+= }' | tac
10 86
9 66
7 45
0 0

通过在两个数组中累加总和来避免两个 tac

$ awk '{ 
    for (i = 1; i <= NR; ++i) { sum2[i] += ; sum3[i] +=  } 
} 
END {
    sum2[NR] = sum3[NR] = 0 
    for (i = 1; i <= NR; ++i) print sum2[i], sum3[i]
}' file
10 86
9 66
7 45
0 0

每一行的值都加到前面的所有行中。处理完所有行后,最后的值将清零并打印所有内容。