在 awk 中创建数字列表的运行总计?

在 awk 中创建数字列表的运行总计?

我需要像这样对数字求和

输入1 5 6 8 9 11

输出1 6 12 20 29 40

即: 1 1+5 1+5+6 1+5+6+8 1+5+6+8+9 1+5+6+8+9+11

答案1

awk

{
    for (i = 1; i <= NF; ++i) {
        printf("%d ", s += $i);
    }
    printf("\n");
}

该循环遍历所有输入字段并打印s数字的运行总计 ( )。该变量s不需要初始化,因为它的值在第一次迭代时将为零。赋值的结果s是 的值s,然后用尾随空格字符打印该值。

使用示例输入:

$ echo "1 5 6 8 9 11" | awk -f script.awk
1 6 12 20 29 40

答案2

这是使用“dc”计算器命令的方法:

echo '1 5 6 8 9 11' |
dc -e "
[SM]sa               # macro a pushes TOS into stack M              
[dn32and]sp          # macro p prints current sum value
[z 1 <a SM z 0 <b]sb # macro b accumulates the main stack in stack M
[LM+lpx z lN !<c]sc  # macro c is while loop for showing running sum
? zsN lbx 0 lcx []p  # main() which brings together all macros
"

相关内容