Bash 将非整数与if进行比较

Bash 将非整数与if进行比较,bash,if-statement,conditional,Bash,If Statement,Conditional,我想查看一个包含一列十进制数字的文件,找到所有(+或-)2.2/100的条目,并将它们重定向到一个文件。这就是我目前得到的 cat numfile.txt 100.56 99.6 96.8 86.77 105.7 95.5 92.4 101.1 102.5 98.7 这就是我一直在尝试的 while read line do num=2.2 if [ $line -ge $num ] then echo $line > savefi

我想查看一个包含一列十进制数字的文件,找到所有(+或-)2.2/100的条目,并将它们重定向到一个文件。这就是我目前得到的

cat numfile.txt

100.56
99.6
96.8
86.77
105.7
95.5
92.4
101.1
102.5
98.7
这就是我一直在尝试的

while read line
  do
    num=2.2

    if [ $line -ge $num ] 
      then 
        echo $line > savefile.txt
    fi
  done < numfile.txt

可能不是更好,但有效:

 if [ `echo "scale=2;sqrt((100-$line)^2)<=$num" | bc` -eq 1 ]

如果[`echo”scale=2;sqrt((100-$line)^2)我建议通过“bc”发送比较计算

比如说

  result=$(echo "scale=2;  ( $line >= 100 - $num )  &&  ($line <= 100 + $num  ) " | bc)

result=$(echo“scale=2;($line>=100-$num)&&($line=100-$num)&&($line稍微混合了两种方法:

c=2.2

while read n; do
    (( $(bc -l <<< "sqrt(($n-100)^2) <= $c") )) && echo $n
done < numfile.txt > savefile.txt
c=2.2
读;做

($(bc-l乍一看,这段代码似乎自相矛盾。1.bash只支持整数。2.bc和awk都没有abs函数。您可以在bc中生成这样的abs函数:printf“scale=2;\n定义myabs(x){\n如果(x>0)返回x;\n返回-1*x;\n};\n myabs(-11.3)\n”| b问题不是$line>num.$line是100+/-$num@Mike非常感谢你的帮助!!!如果你不介意的话,我还有最后一个问题。你是怎么做的(边读边答)在同一个脚本中,变量行与ech other冲突?您可以使用不同的变量名,而不是行。读取Aline时;执行…读取bline时;执行…变量将是Aline和bline。我不建议使用Aline和bline名称,但在这种情况下使用一些有意义的名称。为什么选择回答from Mike Wodarczyk?我回答了第一个问题,我提出了两种不同的方法。Mark回答错了,在我发表评论后,我将自己的方法考虑进去。
  result=$(echo "scale=2;  ( $line >= 100 - $num )  &&  ($line <= 100 + $num  ) " | bc)
 if [ $(echo "scale=2;  ( $line >= 100 - $num )  &&  ($line <= 100 + $num  ) " | bc) -eq 1 ] ; 
     then 
         ... # do true stuff
  fi
c=2.2

while read n; do
    (( $(bc -l <<< "sqrt(($n-100)^2) <= $c") )) && echo $n
done < numfile.txt > savefile.txt