【发布时间】:2014-05-20 11:11:06
【问题描述】:
我需要使用一组保存在单独文件中的规则来确定在 gawk 脚本中处理的文档是否有效。规则文件包含如下几行:
record[3] > 5 && record[35] ~ /Boiler/
将规则文件读入数组后,我现在想遍历数组的每一行,以检查每个输入文档的条件是否为真。类似于以下内容,其中 rule_array[i] 使用上述规则进行评估。
for (i=1;i<=rule_count;i++){
if (rule_array[i]){
flag="T"
}
}
如何将 rule_array 中的字符串视为 if 语句中使用的命令。 if 语句应该相当于:
if (record[3] > “5.0” && record[35] ~ /Boiler/){
在互联网上搜索后,shell 脚本似乎很容易,但这必须在 gawk 中运行,因为它只是庞大脚本的一小部分。使用 awk,最接近的似乎是以下内容,但我认为这在此处行不通,因为它不是命令。
AWK - execute string as command?
更新:
为了简化问题,我怎样才能得到以下评估。我希望使用“逻辑”中的逻辑,而不是测试:“逻辑”不是空的。
awk 'BEGIN{var=2;logic="var==5";if(logic){print "TRUE"}}'
谢谢,
德国
【问题讨论】:
-
所以
rule_array[i]包含 "record[3] > "5.0" && record[35] ~ /Boiler/" 并且您想在if中添加 "eval" 吗?我不认为你能做到这一点,尽管我很高兴被证明是错误的。也许有更好的方法来解决这个问题,你到底想在这里做什么? -
为什么不把单独的文件变成一个 gawk 脚本呢?然后你可以提前为每个文件运行它来检查它们是否有效..
-
正是汤姆。我想提供一个 awk 脚本将使用的条件列表。它们需要单独提供,这样主脚本就不会经常被编辑。
-
Håkon,我已经在一个 awk 脚本中,其中输入文件被读入数组(record[] 数组),以根据设定的标准进行检查。一个单独的 awk 脚本不起作用,因为我可能需要同时检查数组的不同行,例如if条件可能是“如果输入文件的第1行等于第9行”,所以我不能逐行处理输入。
-
使用 awk 的
-v选项,可以将外部变量(如您的规则)传递给 awk 内部变量。但是record数组我还是无法从外面通过。