我目前正在使用近似grep (Agrep)来获取数千个短字符串列表与数百万个长字符串列表之间的匹配。
任务:
在'ABCDE','...XYZABCDEFG...‘中查找'ABCD’或者甚至是“...XYZqBCDEFG...”(1个不匹配)
agrep工作得很好,但对于我必须做的事情(字符串匹配有1个不匹配)来说,它太慢了。有没有人能推荐一个更快的替代方案?
发布于 2015-05-28 21:12:17
我不知道这个答案的性能将如何与您现在所拥有的进行比较。
开始于
one_mismatch_regex() {
local patterns
for ((i=0; i < ${#1}; i++)); do
patterns+=( "${1:0:i}.${1:i+1}" )
done
local IFS='|'
echo "${patterns[*]}"
}这样做是这样的:
$ 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.txtwhile循环将搜索单词列表转换为一个正则表达式,该正则表达式将匹配一个不匹配的单词,并将正则表达式写入stdout。然后,grep将使用扩展正则表达式匹配(-E),并从名为- (stdin)的文件中读取正则表达式。
https://stackoverflow.com/questions/30484792
复制相似问题