我有脚本文件。
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。
请帮帮我
答案 0 :(得分:1)
在bash(> 3.0?)中你可以做到
(( totalAmount += amount ))
如果不是拼写错误的问题,您可以尝试将totalAmount=$(expr $totalAmout+$amount)
行换成(( totalAmount += amount ))
如果您正在处理浮点数
totalAmount=`echo "$totalAmount + $amount" | bc -l`
答案 1 :(得分:0)
答案 2 :(得分: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)
答案 3 :(得分:0)
空间很重要,因为expr
是一个处理其参数的命令。
expr $totalAmount+$amount
使用单个参数运行expr
(假设参数扩展没有分词结果),而
expr $totalAmount + $amount
使用3个参数运行expr
(同样,假设没有其他分词)。单个参数变量将简单地计算为相同的字符串;它不会尝试将参数解析为添加。
使用expr
进行算术大多已经过时,因为POSIX标准包含
totalAmount=$(( totalAmount + amount ))
答案 4 :(得分:0)
删除非必要部分后,您的脚本等同于:
totalAmount=$(awk -F'CACH' '
/BPR/ {c=$1;sub(/[^0-9]*/,"",c);total+=c/100}
END {printf "%.2f", total}' *.TXT)
答案 5 :(得分: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