如何在以下 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.