0

我写了一个小的 shell scipt,但我的 if 语句无法正常工作。

我正在通过一个文件(14380 行和 134 列)运行 while 循环,并且我想按照条件在某些行上做一些工作 number in column 4 > 6 and number in column 4 < 7。第 4 列中的数字是一个实数,我知道 if 语句只对整数进行操作。这是我的问题吗?我认为 if 语句会将我的数字读取get_lon为整数,例如。get_lon=14.824它会读为get_lon=14. 那样就好了。很长一段时间后,它没有给出错误消息,但它没有按照我的意愿过滤数据。现在文件的所有行都在通过测试。

#!/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

在测试浮点数时使用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 回答
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 回答