2012-03-12 15 views
1

私は、特定の文字列(doubleを含む)の行数を調べる簡単なスクリプトを作成しようとしています。しかし、私はいくつかの問題があります。問題を引き起こすBashスクリプトの二重表現

/counter: line 4: [: 0.1: integer expression expected 

誰かが私を助けることができるしてください:私は私が解決するかどうかはわかりません、次のエラーを取得し、それを実行しようとすると、ここで私はしかし

#!/bin/bash 

x=0.1 
while [ $x -le 5 ] 
do 
     cat b.txt | grep "Red: $x" | wc -l >> blah 
     x=$(($x + 0.1)) 
done 

を書いたスクリプトは、ありますでる?

サンプルファイル:

Red: 0.1 
Red: 1.1 
Red: 2.3 
Red: 0.5 
Red: 3.9 
Red: 1.0 
Red: 4.4 
+0

脇の下として、Catの無駄な使用は、単純に 'grep -c" Red:$ x "b.txt >> blah'と置き換えることができます。 http://partmaps.org/era/unix/award.htmlも参照してください。 – tripleee

答えて

2

バッシュは整数だけで動作します。 bashのマニュアルページのARITHMETIC EVALUATIONセクションを参照してください。

(浮動小数点であっても、小数点以下の桁数では問題が発生しますが、0.1を値1で、0.2を2とするなどして、4.7が47になるようにしてください。 。ものの数字が続くリテラルピリオド)

1

あなたはbcにを使用することができます浮動小数点を処理する算術:

[ $(bc<<<"$x<5") -eq 1 ] 
1

このタイプのnon-Integer Mathematical calculationsにはawkを使用する方が良いでしょう。

awk '/Red:/{if (sum<5) sum+=$2;} END{print sum;}' file 
関連する問題