-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

expr引数を処理するコマンドと同様に、スペースは重要です。

expr $totalAmount+$amount

expr単一の引数で実行されます (パラメーター展開から単語分割の結果が得られないと仮定します)。

expr $totalAmount + $amount

3 つの引数で実行exprされます (ここでも、他の単語分割がないことを前提としています)。単一の引数の種類は、単純に同じ文字列に評価されます。引数を加算として解析しようとはしません。

exprPOSIX 標準には次の形式の算術展開が含まれているため、 for 算術の使用はほとんど時代遅れです。

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 に答える
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

dcまたはbcコマンド ライン計算機を使用して、整数の加算よりも複雑な算術演算を実行できます。

dc逆ポーランド記法ですが、bcの方がなじみがあります。

于 2013-10-08T15:56:40.763 に答える