Какой самый быстрый способ удалить строки в файле, которые не совпадают во втором файле?

У меня есть два файла, wordlist.txtи text.txt.

Первый файл, wordlist.txt, содержит огромный список слов на китайском, японском и корейском языках, например:

你
你们
我

Второй файл, text.txt, содержит длинные отрывки, например:

你们要去哪里?
卡拉OK好不好?

Я хочу создать новый список слов ( wordsfount.txt), но он должен содержать только те строки из списка слов.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 уникальных символов, то скрипту не нужно проверять столько строк.

Как быстрее всего создать список, содержащий только те слова, которые находятся в первом файле, но также находятся где-то во втором?

18
задан cfi 28 March 2012 в 13:57
поделиться