比较非整数与 if

Compare non integers with if

我想查看一个包含一列十进制数字的文件,找到所有(+ 或 -)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

期望的输出

cat savefile.txt

100.56
99.6
101.1
98.7

可能不是更好但有效:

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

另一种方式:

num=2.2
awk '{if (sqrt((100-)^2) < '$num') { print }}' < numfile.txt > savefile.txt

我建议通过"bc"发送比较计算。

例如

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

$result 如果为假则为“0”,如果为真则为“1”。 您的 if 语句将如下所示:

 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

如果其内容不等于零,(( )) 条件计算结果为真,如果条件计算结果为真,bc 打印 1

-l选项定义数学库,启用sqrt功能,设置scale20

我已将重定向移到循环之外以避免每次都必须打开和关闭文件描述符。