Как удалить строки из слов текстового файла в списке? - PullRequest
2 голосов
/ 21 июня 2020

file1> word_list.txt> более 1 000 000 строк

file2> list.txt> более 1 000 000 строк

У меня есть файл, содержащий список слов. Я хочу удалить все вхождения всех слов в этом файле из большого текстового файла.

Пример:

Файл 1

111
222

Образец текстового файла

111
222
333
444
555

Вывод

333
444
555

Этот код будет очень медленным для больших файлов с более чем 1 миллионом строк:

sed -e "$(sed 's:.*:s/&//ig:' word_list.txt)" list.txt

Какой метод является наиболее подходящим для этой проблемы?

1 Ответ

1 голос
/ 21 июня 2020

предположений, файлы структурированы по одному слову в каждой строке, слова уникальны в каждом файле, файлы могут быть отсортированы (или уже в отсортированном порядке)

$ comm -13 file1 file2

333
444
555

-1   suppress lines unique to file1
-3   suppress lines that appear in both files 

, что даст вам уникальные слова в файле2, которые не находятся в file1 (то есть установленная разница file2 \ file1)

Это должен быть самый быстрый подход. Пожалуйста, опубликуйте время, если вы можете протестировать альтернативные решения.

В качестве альтернативы,

$ awk 'NR==FNR{a[$0]; next} !($0 in a)' file1 file2

должен работать, пока у вас достаточно памяти. Это не требует сортировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...