0

小さなシェル スクリプトを作成しましたが、if ステートメントが機能しません。

ファイル (14380 行、134 列) に対して while ループを実行しており、基準に従って特定の行で何らかの作業を行いたいと考えています number in column 4 > 6 and number in column 4 < 7。列 4 の数値は実数であり、if ステートメントは整数のみで動作することがわかっています。これは私の問題ですか?get_lonif ステートメントは私の番号を整数として読み取ると思っていました。get_lon=14.824と読みますget_lon=14。それはbeで大丈夫でしょう。長い間、エラーメッセージは表示されていませんが、必要に応じてデータをフィルタリングしません。現在、ファイルのすべての行がテストされています。

#!/bin/bash/sh
ulimit -s unlimited
datafile=$1

wfno=0
cat $datafile | while read line 

do        
    wfno=`expr $wfno + 1`  
    echo $wfno      

    get_lon=`awk '(NR=='$wfno'){print $4}' $datafile`
    echo $get_lon

    if test ["$get_lon" > "6" -a "$get_lon" < "7"] 
    then      
        awk '(NR=='$wfno'){for(i=7;i<=NF;i++){print i-7, $i;}}' $datafile > xy
        echo 'awk done '

        some more stuff...
    else
        echo "Line not valid"
    fi
done

お願いします、誰か助けてくれませんか?

4

3 に答える 3

0

整数を比較するには-gt、(より大きい)と(より小さい)を使用します。-lt

if ["$get_lon" -gt "6" -a "$get_lon" -lt "7"]
于 2012-10-19T08:17:56.120 に答える
0

後にスペースを追加する必要があります[

また、フロートを使用しても以下が機能します。

if [ "$count" -gt 1 -a "$count" -lt 2 ]|bc

以下でテスト:

> cat temp.sh
#!/bin/sh

count=1.5
if [ "$count" -gt 1 -a "$count" -lt 2 ]|bc
then
echo "yes"
fi
> temp.sh
yes
> 
于 2012-10-19T09:01:30.227 に答える
0

浮動小数点数をテストするときは、代わりにexprorを使用します。bc

if expr "$get_lon" '>' 6 && expr "$get_lon" '<' 7; then
    ...
fi

または

if [ "$(echo "$get_lon > 6" | bc)" = 1 -a "$(echo "$get_lon < 7" | bc)" = 1 ]; then
    ...
fi

exprコマンド置換が不要なため、を使用することをお勧めします。

于 2014-08-06T12:55:53.660 に答える