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

时间:2017-02-02 16:11:44

标签: 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)" && 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.

我想浏览一下这个文件并查找以+或 - 1为655的数字,以便输出文件看起来像

654
655.5
655
655
656

1 个答案:

答案 0 :(得分:0)

假设:

$ cat file
655.5
600
654
650
656
655
672
657
655
671

您可以使用目标的容差和绝对值差异进行过滤:

$ 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