2013-10-08 50 views
-3

我有脚本文件。使用shell脚本添加整数不起作用?

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 + = $量运行该扔了错误。

我需要将总量存储在像totalAmount这样的变量中。

请帮我

+0

怎么样努力$ totalAmout + $量 – Satya

+0

我已经试过这兄弟,但它不工作:( – Ricky

+2

PEBKAC:!'$ totalAmout' = '$ totalAmount' –

回答

1

在bash(> 3.0?),你可以做

((totalAmount += amount)) 

如果它不是一个错字的问题,你可以尝试更换您的totalAmount=$(expr $totalAmout+$amount)线((totalAmount += amount))

如果您正在处理浮点数

totalAmount=`echo "$totalAmount + $amount" | bc -l` 
+0

您错过了'$(' 。表达式))' –

+0

工作不显示错误如下 ((:46691297.78:表达式语法错误(错误标记为” 0.78" ) 我试图添加浮点值,是因为这一点。? ? – Ricky

+0

是的.Bash shell只处理整数 –

0

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

dc是反向波兰标记,而bc比较熟悉。

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) 
0

空间很重要,因为expr是一个处理其参数的命令。

expr $totalAmount+$amount 

运行expr带一个参数(假设从参数扩展无字分割的结果),而

expr $totalAmount + $amount 

运行expr与3个参数(再次,假设没有其它字分裂)。单参数变量可以简单地评估为相同的字符串;它并不试图将这个论点解析为一个加法。

使用expr算术基本上是过时的,因为POSIX标准包括在

totalAmount=$((totalAmount + amount)) 
0

形式算术扩展除去非基本部分之后,你的脚本是相同的:

totalAmount=$(awk -F'CACH' ' 
    /BPR/ {c=$1;sub(/[^0-9]*/,"",c);total+=c/100} 
    END {printf "%.2f", total}' *.TXT) 
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