我写了一个小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
拜托,有人可以帮忙吗?
答案 0 :(得分:0)
使用-gt
(大于)和-lt
(小于)来比较整数。
if ["$get_lon" -gt "6" -a "$get_lon" -lt "7"]
答案 1 :(得分: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
>
答案 2 :(得分:0)
在测试浮动数字时使用expr
或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
,因为它不需要命令替换。