2013年7月22日月曜日

bashでのseqによる問題

以前、sensitvity analysisをbashのスクリプトでやっていて小数点によるseqの問題が解決されていなかったんだが小数点ではなく整数でseqを取り扱って、forループのなかで小数点の入った数字を扱うことにした。

なぜかplacentiaのbashでは:

「seq 2.7 0.03 3.3」の答えが…

2.7
2.73
2.76
2.79
2.82
2.85
2.88
2.91
2.94
2.97
3
3.03
3.06
3.09
3.12
3.15
3.18
3.21
3.24
3.27

…となる。最後の数字(3.3)が抜けているのである。これを自分のmacbook airでやると問題なく計算される。

placentiaの人にbashのバージョンアップをしてくれと問い合わせてみたがそこが問題ではないと言われ、小数点を使わない方法を勧められたが自分が求めているものは見つからず。

結局、今日考えついたのが、seqをループで出したい数字の合計(上記の場合だと21)として使いそのループ内で足し算しながら各ステップで上記の数字を求めていくことにする:

for it in `seq 0 20`; do echo "scale=2;$number+3/100*$it" | bc; done

2.70
2.73
2.76
2.79
2.82
2.85
2.88
2.91
2.94
2.97
3.00
3.03
3.06
3.09
3.12
3.15
3.18
3.21
3.24
3.27
3.30

これで3.30までちゃんと求められるようになった。

0 件のコメント:

コメントを投稿