@Viktorrrrrrr
начинающий сис админ

Как удалить из большого файла строки, которые есть в другом файле?

Стоит задача удалить из файла (1.txt) весом 10 гигабайт строки, которые находятся в другом файле (2.txt) весом 5 гигабайт. На компьютере при этом 8 гигабайт оперативной памяти.
Оба файла отсортированы, имеют кодировку UTF-8 без BOM, в них не содержится символа возврата каретки (\x0D или \r). Из файла 2.txt почти все строки присутствуют в файле 1.txt
Подскажите пожалуйста, есть ли для данной задачи готовые решения? Желательно под Windows, но так же можно и под Linux.

Я пробовал 3 решения:
Первое под линукс, команда comm, запускаю с параметрами: comm -23 1.txt 2.txt > out.txt и на выходе получаю в файл out.txt все строки из файла 1.txt как есть, без удаления строк содержащихся в файле 2.txt
Если же делать через grep -vf 2.txt 1.txt > out.txt то отваливается из за нехватки оперативной памяти.

Второе решение это windows утилитка findstr запускал с параметрами:
FINDSTR /V /G:C:\2.txt C:\1.txt > C:\new.txt
работает долго, где то пару суток, затем всё равно валится в ошибку.

Третье решение, через софтину TextPipe Pro, эта работает как то странно, указываю файл с которым работать, в фильтрах выбираю удалить строки, укаываю файл, из которого строки брать, в итоге выбранный файл игнорирует, как и в случае с линуксовой утилитой comm я получаю оригинальный файл 1.txt без изменений.
При этом, с маленькими объемами данных TextPipe Pro работает как надо, с чуть более крупными, например из гигового отсортировать строки которые есть в полугиговом, тут он выдаёт ошибку нехватки оперативной памяти, а с 10 гигабайтным и вовсе игнорирует операцию, делая видимость, что её выполняет.

Буду очень признателен, если кто подскажет какие решения. Я не программист, варианты написать скрипт(bash,python), или загнать всё в базу, просьба не предлагать. Так же пожелание, не предлагать вариантов которые будут удалять строки из 10 гигового файла более недели.
  • Вопрос задан
  • 786 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы