找出列表中的任何单词是否是较长单词中的子字符串的更快方法

我拥有的

  • 一串s长度m(其中 m > 3)
  • 一个巨大的列表Lwords(长度> 2)

我想知道什么

  • 任何wordL子串中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 中使用以下单词并将其输入到前面的命令中

以上是找出列表中的任何单词是否是较长单词中的子字符串的更快方法的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>