![在 awk 中创建数字列表的运行总计?](https://linux22.com/image/105738/%E5%9C%A8%20awk%20%E4%B8%AD%E5%88%9B%E5%BB%BA%E6%95%B0%E5%AD%97%E5%88%97%E8%A1%A8%E7%9A%84%E8%BF%90%E8%A1%8C%E6%80%BB%E8%AE%A1%EF%BC%9F.png)
我需要像这样对数字求和
输入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
"