У меня есть два файла: wordlist.txt
и text.txt
.
Первый файл wordlist.txt
содержит огромный список слов на китайском, японском и корейском языках, например:
你
你们
我
Второй файл text.txt
содержит длинные проходы, например:
你们要去哪里?
卡拉OK好不好?
Я хочу создать новый список слов (wordsfount.txt
), но он должен содержать только те строки из wordlist.txt
, которые встречаются хотя бы один раз внутри text.txt
. Выходной файл из приведенного выше должен показать это:
你
你们
"我" не найден в этом списке, потому что он никогда не найден в text.txt
.
Я хочу найти очень быстрый способ создания этого списка, который содержит только строки из первого файла, которые находятся во второй.
Я знаю простой способ в BASH проверить каждую строку в worlist.txt
и посмотреть, находится ли она в text.txt
, используя grep
:
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, их можно рассматривать как гигантский алфавит, содержащий около 8000 букв. Поэтому почти каждое слово делится персонажами. Например:.
我
我们
В связи с этим, если "我" никогда не встречается внутри text.txt
, то вполне логично, что "我们" никогда не появляется. Более быстрая script, возможно, сначала проверит "我" , и, обнаружив, что ее нет, не будет проверять каждое последующее слово, содержащееся с wordlist.txt
, которое также содержится в wordlist.txt
. Если в wordlist.txt
содержится около 8000 уникальных символов, тогда script не нужно проверять столько строк.
Каков самый быстрый способ создать список, содержащий только те слова, которые находятся в первом файле, которые также находятся где-то внутри второго?