Самый быстрый способ удалить дубликаты строк в очень больших файлах .txt - PullRequest
4 голосов
/ 20 сентября 2010

Каков наилучший способ удаления повторяющихся строк из больших файлов .txt, таких как 1 ГБ и более?

Поскольку удаление дубликатов один за другим является простым, мы можем превратить эту проблему в простую сортировку файла.

Предположим, что мы не можем загрузить целые данные в RAM из-за их размера.

Я просто жду, когда получу все записи из таблицы SQL с одним уникальным индексным полем (я загрузил строки файла в таблицу ранее) и удивляюсь, существует ли способ ускорить его.

Ответы [ 2 ]

2 голосов
/ 20 сентября 2010

Вы можете попробовать фильтр Блума .В то время как вы можете получить некоторые ложные срабатывания (хотя вы можете получить произвольно близкие к 0% ценой дополнительной обработки), это должно быть довольно быстро, так как вам не нужно сравнивать или даже выполнять log (n) поиск для каждой строки, которую выувидеть.

0 голосов
/ 20 сентября 2010

читать файл по два байта за раз.если эти два байта являются новой строкой (\ r \ n), то укажите, что у вас есть новая строка.Теперь прочитайте следующие два, и если они будут новой строкой, сохраните флаг, но удалите эту новую строку (когда я говорю «удалить», это означает, что пропустить запись новой строки во временный файл)теперь, если вы встретите другую новую строку, она снова будет удалена, но если нет, то сбросьте флаг.затем скопируйте содержимое вашего временного файла в оригинал, и все готово.

Вы также можете читать по 1 байту за раз, если ищете один (\ n).или вы можете одновременно читать по 1 КБ файла и затем выполнять эти операции в памяти (это будет намного быстрее).

...