找出列表中的任何单词是否是较长单词中的子字符串的更快方法
我拥有的
- 一串
s长度m(其中 m > 3) - 一个巨大的列表
L的words(长度> 2)
我想知道什么
- 任何
word在L子串中s
目前我已经L分成了多个文件,每个文件每个字长16.txt , 15.txt ... 04.txt
然后我从n.txt --> 04.txt迭代这些文件,基本上做
cat n.txt | while read w; do if [[ $s =~ $w ]] ; then echo $w; fi; done
它是痛苦的缓慢有有是一个更好的方式来做到这一点。
附加信息:
L包含大约 20 万个单词并且相当静态,所以我不介意复杂的耗时设置,如果这意味着更快的速度- 有几种不同的此类列表,
L但一次只需要搜索其中一个。
我是语言不可知论者(se 标签),但伪代码也很好
回答
您可以在grep不拆分列表的情况下使用:
grep -oFf list.txt <<< "$s"
-o只会输出匹配的子串-F将 list.txt 中的行解释为固定字符串,而不是正则表达式-f将告诉 grep 使用哪个文件作为匹配模式的源<<<在 bash 中使用以下单词并将其输入到前面的命令中