String 如何用更快的东西取代agrep?

String 如何用更快的东西取代agrep?,string,grep,match,String,Grep,Match,我目前正在使用近似grep(Agrep)来获得数千个短字符串列表与数百万个长字符串列表之间的匹配 任务: 在“ABCDE”中找到“ABCD”,“…XYZABCDEFG…”甚至“…XYZqBCDEFG…”(1不匹配) agrep工作得很好,但对于我必须做的事情来说太慢了(字符串匹配与1不匹配)。有人能推荐一个更快的替代方案吗?我不知道这个答案的性能与您现在的相比会如何 从 one_mismatch_regex() { local patterns for ((i=0; i <

我目前正在使用近似grep(Agrep)来获得数千个短字符串列表与数百万个长字符串列表之间的匹配

任务:

在“ABCDE”中找到“ABCD”,“…XYZABCDEFG…”甚至“…XYZqBCDEFG…”(1不匹配)


agrep工作得很好,但对于我必须做的事情来说太慢了(字符串匹配与1不匹配)。有人能推荐一个更快的替代方案吗?

我不知道这个答案的性能与您现在的相比会如何

one_mismatch_regex() {
    local patterns
    for ((i=0; i < ${#1}; i++)); do
        patterns+=( "${1:0:i}.${1:i+1}" )
    done
    local IFS='|'
    echo "${patterns[*]}"
}
因此:

阅读搜索词时
;做
一个正则表达式“$search\u word”
已完成

while循环将搜索词列表转换为正则表达式,该正则表达式将匹配一个不匹配的词,并将正则表达式写入stdout。然后,grep将使用扩展正则表达式匹配(
-E
)并从名为
-
(stdin)的文件中读取正则表达式。

您需要更明确地说明“必须做什么”。使用示例更新感谢您的帮助。它看起来需要相同的时间:17:08:58.450521007+0100 end_regex.txt 17:08:20.494522421+0100 start_regex.txt 17:07:14.41852483+0100 end_agrep.txt 17:06:39.930526168+0100 start_agrep.txt agrep为35秒,regex为38秒
$ one_mismatch_regex foobar
.oobar|f.obar|fo.bar|foo.ar|foob.r|fooba.
while read search_word; do
    one_mismatch_regex "$search_word"
done < searches.txt |
grep -E -f - data.txt