比较非整数与 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
功能,设置scale
为20
。
我已将重定向移到循环之外以避免每次都必须打开和关闭文件描述符。
我想查看一个包含一列十进制数字的文件,找到所有(+ 或 -)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
功能,设置scale
为20
。
我已将重定向移到循环之外以避免每次都必须打开和关闭文件描述符。