一种更快的方法来找出列表中的任何单词是否是较长单词的子字符串
A faster way to find out if any word in a list is a substring in a longer word
我有什么
- 长度为
m
的字符串 s
(其中 m > 3)
L
个 words
的巨大列表(长度 > 2)
我想知道的
L
中的任何word
是否是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 使用哪个文件作为匹配模式的来源
<<<
in bash 将后面的单词输入到前面的命令
我有什么
- 长度为
m
的字符串s
(其中 m > 3) L
个words
的巨大列表(长度 > 2)
我想知道的
L
中的任何word
是否是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 使用哪个文件作为匹配模式的来源<<<
in bash 将后面的单词输入到前面的命令