我试图一次有效地匹配多个模式,原则上效果很好:
echo abcdef | awk \
'/abc/ {print "match abc"}
/def/ {print "match def"}'
此外,我想匹配记录中的所有事件:
echo abcabc | awk \
'function findall(str, re) {
while(match(str, re)) {
print "match", re;
str = substr(str, RSTART+RLENGTH)
}
}
{
findall($0, "abc");
}'
现在扩展上面的示例以匹配多个模式,我最终会得到一系列 findall 调用:
findall($0, "abc");
...
findall($0, "def");
问题在于,对于许多不同的模式 (>100),这种方法的性能几乎不如第一个样本。这是有道理的,因为我猜这个模式不会出现在同一个自动机中。
有没有办法稍微加快速度?例如,为多种模式提供“匹配”。我想我可以连接模式(abc|def),但是我会丢失确切匹配的模式的信息。
更新:每一次出现都应该匹配:
abcabc
123
abcxyz
作为输入数据导致2 个匹配记录(给定标准分隔符),但如果与模式“abc”和“xyz”一起使用,则整个数据中有 4 个匹配。这篇文章中的第一个示例至少报告了3 个匹配项,但未能在第一条记录中检测到多次出现的“abc”