首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用更快的东西取代agrep?

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

Stack Overflow用户
提问于 2015-05-27 22:01:26
回答 1查看 330关注 0票数 1

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

任务:

在'ABCDE','...XYZABCDEFG...‘中查找'ABCD’或者甚至是“...XYZqBCDEFG...”(1个不匹配)

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

EN

回答 1

Stack Overflow用户

发布于 2015-05-28 21:12:17

我不知道这个答案的性能将如何与您现在所拥有的进行比较。

开始于

代码语言:javascript
复制
one_mismatch_regex() {
    local patterns
    for ((i=0; i < ${#1}; i++)); do
        patterns+=( "${1:0:i}.${1:i+1}" )
    done
    local IFS='|'
    echo "${patterns[*]}"
}

这样做是这样的:

代码语言:javascript
复制
$ one_mismatch_regex foobar
.oobar|f.obar|fo.bar|foo.ar|foob.r|fooba.

所以:

代码语言:javascript
复制
while read search_word; do
    one_mismatch_regex "$search_word"
done < searches.txt |
grep -E -f - data.txt

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30484792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档