如何计算 bash 直到循环中生成的值的总和?

如何计算 bash 直到循环中生成的值的总和?

如何在以下 bash 脚本中有效地添加 Until 循环的输出?

#!/bin/bash

fcf=2000
g1=0.05
ny1=5

gip=0

until [ $gip -eq $ny1 ]; do
        awk "BEGIN {print $fcf * (1 + $g1)^$gip}"
        ((gip++))
done

我运行循环时的输出是:

2000
2100
2205
2315.25
2431.01

然而我想要得到的是输出中生成的值的总和,即 11051.26。

答案1

如果您无论如何都要使用 awk,为什么不一直使用 awk?

#!/usr/bin/awk -f

BEGIN {
    fcf=2000
    g1=0.05
    ny1=5
    gip=0
    
    sum=0
    
    while(gip != ny1){
        sum+=(fcf * (1 + g1) ^ gip)
        gip++
    }
    printf("%.2f\n", sum)
}

答案2

我考虑了 Kamil 和 Bobby 的意见,并得出了这个可行的答案:

#!/bin/bash

awk 'BEGIN {
    fcf=2000
    g1=0.05
    ny1=5
    gip=0
    
    sum=0
    
    while(gip != ny1){
        sum+=(fcf * (1 + g1) ^ gip)
        gip++
    }
    printf("%.2f", sum)
}'

答案3

为了绕过浮点运算,我稍微改变了公式。此外,不需要运行像 awk 这样的外部命令。

bash 脚本:

#!/bin/bash
fcf=200000
g1=5
ny1=5
gip=0

until [ $gip -eq $ny1 ]; do
        X=$(( $fcf*(100+$g1)**$gip/100**$gip ))
        printf "%.2f\n" ${X}e-2
        let SUM=SUM+X
        let gip=gip+1
done

printf "%.2f\n" ${SUM}e-2

输出:

2000.00
2100.00
2205.00
2315.25
2431.01
11051.26

HTH
Stefan K.

相关内容