Удаление дубликатов из текстового файла

288
Mads Nielsen

У меня есть текстовый файл, который может содержать до 13 000 000 случайно сгенерированных кодов, разделенных с "\ n" функцией fputcsv в php.

Каков наиболее эффективный способ удаления дубликатов из этого файла?

Спасибо!

0
Возможный дубликат [Excel 2010 Удаление дубликатов] (http://superuser.com/questions/518751/excel-2010-removing-duplicates) SeanClt 8 лет назад 2
@SeanClt Я пытался с Excell. Это падает. Mads Nielsen 8 лет назад 0
Excel - это программное обеспечение XLS и CSV - это просто формат файла SeanClt 8 лет назад 0
@SeanClt ОП имеет 13 МИЛЛИОНОВ записей. Жесткий предел для строк в Excel 2010 составляет 1 миллион. Burgi 8 лет назад 2
Если бы не Excel, то это должно быть сделано с помощью программного кода VB SeanClt 8 лет назад 0
@MadsAnkerNielsen - напишите небольшую программу, которая загружает файл в блоки. Самый простой способ избежать проблем с памятью - сначала определить количество записей, а затем разбить их на более мелкие фрагменты. После того, как вы разбили файл на куски, вы можете загрузить каждый файл в пакетном режиме, создав объединенный документ, который не содержит дубликатов. * Вы говорите не более 200 строк кода. * Ramhound 8 лет назад 0
Пожалуйста [отредактируйте] свой вопрос и опишите ваш формат файла лучше. Неясно, все ли эти коды находятся в одной строке или в нескольких строках. Почему вы говорите «количество кода может варьироваться»? Я могу интерпретировать это как * на строку * (в этом случае: дать больший образец) или * эти файлы (эти файлы?) Генерируются неоднократно, поэтому я должен автоматизировать этот процесс *. Что это? Jan Doggen 8 лет назад 0

1 ответ на вопрос

2
Burgi

Я думаю, что проблема здесь в том, что в Excel есть ограничение в 1 048 576 строк, а в вашем наборе данных 13 миллионов записей. Каждая запись должна быть на отдельной строке.

Если вы работаете в Windows, вы можете использовать программу NotePad ++ для поиска и удаления дубликатов. Ответ на StackOverflow предлагает использовать либо регулярное выражение, либо плагин.

Я бы использовал опцию регулярного выражения. Ниже приводится краткое резюме ответа SO.

  1. Убедитесь, что каждая запись в одной строке
  2. Откройте поиск и замените
  3. Выберите режим регулярного выражения
  4. Введите выражение ^(.*?)$\s+?^(?=.*^\1$)в поле поиска
  5. Оставьте запасную коробку пустой
  6. Нажмите Заменить все

Если эти данные являются экспортом из базы данных, вы можете подумать об изменении оператора SQL до экспорта, добавив DISTINCTпосле SELECT. Смотрите здесь для примера.

Пожалуйста, [отредактируйте] свой ответ и используйте лучшую терминологию. Вы путаете * линии *, * строки *, * столбцы * и * записи *. Конечно, не помогает, что ОП задает неясный вопрос - может быть, подождать, пока он / она его очистит. Jan Doggen 8 лет назад 0
Я не упомянул колонки вообще! ;) Я понимаю вашу точку зрения, хотя. Burgi 8 лет назад 0
Я проверил это на небольшом файле, который я написал, и выглядел примерно так (123 newline 123 newline 124 .....), и я успешно удалил «123». Но когда я пробую это на моем большом файле, это удаляет все это. Что я делаю неправильно? Спасибо! Mads Nielsen 8 лет назад 0
@MadsAnkerNielsen в ответе SO упоминается, что пометка или снятие галочки с "` .` равно новой строке "может решить эту проблему. Burgi 8 лет назад 0
Мое окончательное решение было использовать плагин с именем textFX. Таким образом, ваш ответ не был точным решением, но вы отправили меня на правильный путь. Mads Nielsen 8 лет назад 1