-3

我有脚本文件。

for file in *.TXT
do
    amount=$(less $file | grep BPR | awk -F'CACH' '{c=$1;sub(/[^0-9]*/,"",c);total+=c/100}END{printf "%.2f", total}')
     totalAmount=$(expr $totalAmount+$amount)
done

现在我的脚本看起来像这样

for file in *.TXT
do
    amount=$(less $file | grep BPR | awk -F'CACH' '{c=$1;sub(/[^0-9]*/,"",c);total+=c/100}END{printf "%.2f", total}')
    echo "$totalAmount += $amount" | bc -l
done

echo $totalAmount

但是当我运行它时,它会在$totalAmout+=$amount处引发错误。

我需要将总金额存储在变量中,如 totalAmount。

请帮我

4

6 回答 6

1

在 bash (> 3.0?) 你可以做

(( totalAmount += amount ))

如果不是拼写错误的问题,您可以尝试替换您的totalAmount=$(expr $totalAmout+$amount)to(( totalAmount += amount ))

如果您正在处理浮点数

totalAmount=`echo "$totalAmount + $amount" | bc -l`
于 2013-10-08T15:46:57.277 回答
0

我相信for循环并且less是多余的。

如果您只需要totalAmount而不amount在任何地方使用,则可以摆脱循环和浮点求和。

totalAmount = $(grep BPR *.TXT | awk <awk_script>)

如果grep您让awk使用/BPR/.

totalAmount=$(awk -F'CACH' '/BPR/ {c=$1;sub(/[^0-9]*/,"",c);total+=c/100}END{printf "%.2f", total}' *.TXT)
于 2013-10-08T15:59:37.920 回答
0

这对我有用。:) 啊!!我在这个脚本后面花了超过 12 个小时.. :(

amount=0
ediAmount=0
totalRawAmount=0
totalEdiAmount=0

for file in *.TXT
do
    amount=$(less $file | grep BPR | awk -F'CACH' '{c=$1;sub(/[^0-9]*/,"",c);total+=c/100}END{printf "%.2f", total}')
    totalRawAmount=$(echo "$amount"+"$totalRawAmount" | bc)
done

echo $totalRawAmount
于 2013-10-09T10:43:21.563 回答
0

可以使用命令行计算器dcbc命令行计算器执行比整数加法更复杂的算术运算。

dc是反向波兰表示法,而bc更熟悉。

于 2013-10-08T15:56:40.763 回答
0

空间很重要,expr处理其参数的命令也很重要。

expr $totalAmount+$amount

expr使用单个参数运行(假设参数扩展没有分词结果),而

expr $totalAmount + $amount

使用 3 个参数运行expr(再次假设没有其他分词)。单个参数变体将简单地评估为相同的字符串;它不会尝试将参数解析为添加。

由于 POSIX 标准包括以下形式的算术扩展,因此使用exprfor 算术几乎已经过时

totalAmount=$(( totalAmount + amount ))
于 2013-10-08T16:07:57.807 回答
0

删除非必要部分后,您的脚本相当于:

totalAmount=$(awk -F'CACH' '
  /BPR/ {c=$1;sub(/[^0-9]*/,"",c);total+=c/100}
  END {printf "%.2f", total}' *.TXT)
于 2013-10-08T16:08:15.940 回答