2012-03-12 33 views
1

我想寫一個簡單的腳本去檢查包含特定字符串(其中包含一個雙)的行數。不過,我有一些問題。下面是我寫Bash腳本雙重表達式導致問題

#!/bin/bash 

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

但是劇本,當我試着執行它時,我得到以下錯誤,我不知道如何解決:

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

請能幫助我的人出來嗎?

示例文件:只有

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

另外,無用的貓可以用簡單的'grep -c「紅色代替:$ x」b.txt >> blah'。另見http://partmaps.org/era/unix/award.html – tripleee 2012-03-12 12:13:07

回答

2

猛砸可與整數。請參閱bash手冊頁中的ARITHMETIC EVALUATION部分。

(即使它做了浮點運算,你也會遇到十進制小數的問題,考慮用值1代表0.1,用0.2代替0.2等等,所以4.7變成47.然後你可以grep十位數。其次是文字期,其後的個位數字)

1

您可以使用bc來做浮點算術:

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

最好使用awk來表示這種non-Integer Mathematical calculations。考慮這個awk腳本:

awk '/Red:/{if (sum<5) sum+=$2;} END{print sum;}' file