Вопрос: Учитывая 2 отсортированных файла - удалите все слова, найденные в другом


В Linux у меня есть два текстовых файла с русскими словами UTF8, отсортированными с sort -u (на самом деле я использовал :%sort u в Vim, он дает такие же результаты).

Один из файлов dict.txt содержит около 700000 слов моего пользовательского словаря. Другой файл bad-words.txt содержит часто ошибочные слова.

Я хотел бы удалить все слова, найденные в bad-words.txt из dict.txt,

Я знаю, что скрипт perl, использующий хэш, может это сделать, но я получаю один liner Unix.

Ist там просьба команда Unix (может быть, что-то использовать diff?) для выполнения этой задачи? И я надеюсь diff не будет путать большое количество строк - потому что программа «Beyond compare» в Windows ...


0
2018-03-20 20:51


Источник




Ответы:


comm сделает это.

comm -3 dict badwords

или сортировать на лету:

comm -3 <(sort dict-input) <(badwords)


3
2018-03-20 21:00



К сожалению, он жалуется comm: file 1 is not in sorted order (несмотря на то, что я его пререкаю) и производит странный вывод из двух столбцов ... - Alexander Farber
comm ожидает, что файл будет отсортирован в ASCII-виде, например. LANG=C sort, - grawity
@grawity: Этот совет спас мой день :) Спасибо! - Sebastian Łaskawiec