我想查看一个带有一列十进制数字的文件,找到所有条目(+或 - )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
答案 0 :(得分:1)
我建议通过&#34; bc&#34;。
发送比较计算例如
result=$(echo "scale=2; ( $line >= 100 - $num ) && ($line <= 100 + $num ) " | bc)
$ result将是&#34; 0&#34;如果是假的&#34; 1&#34;如果陈述是真的。 你的if语句如下所示:
if [ $(echo "scale=2; ( $line >= 100 - $num ) && ($line <= 100 + $num ) " | bc) -eq 1 ] ;
then
... # do true stuff
fi
答案 1 :(得分:0)
可能不是更好但是有效:
if [ `echo "scale=2;sqrt((100-$line)^2)<=$num" | bc` -eq 1 ]
另一种方式:
num=2.2
awk '{if (sqrt((100-$1)^2) < '$num') { print $1}}' < numfile.txt > savefile.txt
答案 2 :(得分:0)
稍微混合两种方法:
c=2.2
while read n; do
(( $(bc -l <<< "sqrt(($n-100)^2) <= $c") )) && echo $n
done < numfile.txt > savefile.txt
如果(( ))
条件的内容不等于零,则bc
条件求值为true;如果条件求值为真,则1
打印-l
。
sqrt
选项定义数学库,该库启用scale
函数,并将20
设置为Response.AddHeader "content-disposition","attachment; filename=your_file_name_here.xls"
。
我已将重定向移到循环外部,以避免每次都打开和关闭文件描述符。