Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用awk在十进制范围内搜索_Awk - Fatal编程技术网

使用awk在十进制范围内搜索

使用awk在十进制范围内搜索,awk,Awk,我希望这不是一个太天真的问题。我有一组文件,其中有一组以分号分隔的项目,其中一些是数字。例如: A;B;4.564;C;D;E;5.698;F;G;H;7.893 等等 在这些文件中,数字可能略有不同,例如,上面示例中的5.698在其他文件中可能是5.691或5.703等。所以,我设置了一个搜索范围,比如从5.685到5.710。在awk one liner实际执行此搜索之前,代码都很好,但我被困在那里了。以下是awk代码: awk -v low=$NUM3 -v high=$NUM2 '{i

我希望这不是一个太天真的问题。我有一组文件,其中有一组以分号分隔的项目,其中一些是数字。例如:

A;B;4.564;C;D;E;5.698;F;G;H;7.893
等等

在这些文件中,数字可能略有不同,例如,上面示例中的5.698在其他文件中可能是5.691或5.703等。所以,我设置了一个搜索范围,比如从5.685到5.710。在awk one liner实际执行此搜索之前,代码都很好,但我被困在那里了。以下是awk代码:

awk -v low=$NUM3 -v high=$NUM2 '{if ($0 >= low && $0 <= high) {print "1"} else {print "0"} }'

awk-v low=$NUM3-v high=$NUM2'{if($0>=low&&$0第一行中的
$0
表示要匹配的整行,因此它可能没有执行您想要的操作。如果您想单独处理每个标记,则必须设置一个字符来分隔(在您的示例中类似于
)并使用awk for循环,如下所示:

awk -F\; '{ for (i=1; i<=NF; i++) { print $i }}'

awk-F\”{for(i=1;i)您希望从您的输入示例中得到哪种类型的输出?您希望打印该范围内的所有数字吗?这很好(超出了我的编码专业知识!),但不是必需的。我只是想生成一个存在/不存在标志,所以是“1”还是“0”所以我可以跟踪哪些文件有特定的范围。谢谢!我本来打算让$0返回整行(因为awk{print$0}返回整行),我希望这可以是一个快速搜索,并且不需要更密集的嵌套循环。但是,我将尝试您的解决方案。好的,这很好,但是现在修改输出以打印这些值的总和会很有帮助,也就是说,只有一个返回值,我只需将您的输出管道化到一个新的awk即可求和值。我相信有一种更有效的方法,但这是可行的。您希望它将数字本身或它们在文件中出现的次数相加吗?
awk -F\; '{ for (i=1; i<=NF; i++) { print $i }}'
awk -F\; -v low=$NUM3 -v high=$NUM2 '{n=0; for (i=1; i<=NF; i++) { if ($i >= low && $i <= high) { n++; }} print n}'
awk -F\; -v low=$NUM3 -v high=$NUM2 '{n=0;
                                      for (i=1; i<=NF; i++) { 
                                         if ($i >= low && $i <= high) { 
                                           n++; 
                                         }
                                      } 
                                      print n;}'