使用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;}'