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
"

関連情報