Bash—评估文件的每一行并与所需范围进行比较的最简单方法

Bash—评估文件的每一行并与所需范围进行比较的最简单方法,bash,math,Bash,Math,我正在寻找最有效的方法。我有7个单独的文件需要过滤 以下是我第一次开始的方式,但请记住,我还需要再做6次 While read line do; Onenum="$(awk '{print $12}' file.txt)" Onenumssum="$(oneadd="$(tail + n 1 num2.txt)" && echo $onenum + $onenumadd | bc Onenumdiff="$(onesub="$(tail - n 1 num2.txt)" &

我正在寻找最有效的方法。我有7个单独的文件需要过滤

以下是我第一次开始的方式,但请记住,我还需要再做6次

While read line do;

Onenum="$(awk '{print $12}' file.txt)"

Onenumssum="$(oneadd="$(tail + n 1 num2.txt)" && echo $onenum + $onenumadd | bc

Onenumdiff="$(onesub="$(tail - n 1 num2.txt)" && echo $onenum - $1sub | bc

if [ "$line" -ge "$onenumdiff" -a -le "$onenumsum" ]; then
然后需要推送$line(如果符合条件)以保存文件

文件到文件管理器的格式如下:

655.5
600
654
650
656
655
672
657
655
671
Ect.
我想浏览一下这个文件,找到655中in+或-1的数字,所以输出文件应该是这样的

654
655.5
655
655
656
鉴于:

可以使用与目标的公差和绝对值差进行过滤:

$ awk -v tgt=655 -v tol=1 'function abs(v) {return v < 0 ? -v : v}
                         abs($1-tgt)<=tol {print $1}' file
655.5
654
656
655
655 
然后将该输出重定向到所需的文件:

$ awk -v tgt=655 -v tol=1 'function abs(v) {return v < 0 ? -v : v}
                         abs($1-tgt)<=tol {print $1}' file > filtered

这段代码有很多问题。请先通过shellcheck.net运行它。同时,如果。。。不能是大写。变量名以数字开头?我们的工作不是破译哪些错误是你的打字错误。您的问题为我们提供了一个解决方案。目前,很难找到帮助你的方法。这真是一段精彩的代码!!!!此外,你还把我的问题说得一清二楚。我觉得有义务去帮助别人,因为这对我很有帮助。
$ awk -v tgt=655 -v tol=1 'function abs(v) {return v < 0 ? -v : v}
                         abs($1-tgt)<=tol {print $1}' file > filtered