我有两个文件,wordlist.txt
和text.txt
。
wordlist.txt
这个文件中包含了大量的中文、日文和韩文单词,例如:
你
你们
我
第二个文件是 text.txt
,包含长篇章节,例如:
你们要去哪里?
卡拉OK好不好?
我想创建一个新的单词列表(wordsfount.txt
),但它应该只包含在text.txt
中至少出现一次的来自wordlist.txt
的那些行。上述操作的输出文件应该显示为:
你
你们
因为在text.txt
中从未找到"我",所以在此列表中未找到它。我想找到一种非常快速的方法来创建此列表,该列表仅包含在第二个文件中找到的第一个文件中的行。
我知道在BASH中使用
grep
的简单方法,可以检查worlist.txt
中的每一行,并查看它是否在text.txt
中。a=1
while read line
do
c=`grep -c $line text.txt`
if [ "$c" -ge 1 ]
then
echo $line >> wordsfound.txt
echo "Found" $a
fi
echo "Not found" $a
a=`expr $a + 1`
done < wordlist.txt
很不幸,由于wordlist.txt
非常长,这个过程需要花费几个小时的时间。必须要有更快的解决方案。以下是一个考虑:
由于文件包含CJK字母,它们可以被视为一个拥有大约8,000个字母的巨型字母表。所以几乎每个单词都共享字符。例如:
我
我们
由于这个事实,如果在text.txt
中从未找到“我”,那么“我们”从未出现也是相当合理的。一个更快的脚本可能会先检查“我”,并在发现不存在时,避免检查包含在wordlist.txt
中的每个后续单词,它们都包含在wordlist.txt
中。如果wordlist.txt
中有大约8,000个独特字符,那么脚本应该不需要检查那么多行。
如何最快地创建仅包含第一个文件中也在第二个文件中某处找到的单词列表?