У меня есть два файла, 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
, то вполне логично, что «我们» также никогда не появляется.Более быстрый сценарий может сначала проверить «我», и, обнаружив, что его нет, не будет проверять каждое последующее слово, содержащееся в wordlist.txt
, которое также содержится в wordlist.txt
.Если в wordlist.txt
найдено около 8000 уникальных символов, сценарию не нужно проверять столько строк.
Какой самый быстрый способ создать список, содержащий только те слова, которые находятся в первом файлекоторые также находятся где-то во втором?