我需要像这样对数字求和
输入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
"