5

Я ищу текстовый редактор Windows с открытым исходным кодом (возможно, 64-битный), который позволит мне удалить дубликаты строк из очень большого (4 ГБ +) текстового файла.

Что вы используете для удаления повторяющихся строк из ваших больших текстовых файлов?

5 ответов5

4

sort -u file > outfile

Удобный Win32 родной порт sort в UnxUtils

Для более сложных значений "удалить дубликаты" существует Perl (и др.).

2

Если у вас есть Cygwin или MinGW, вы можете сделать это с

cat file | sort | uniq >> outfile

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

0

Я также разместил этот ответ на дубликате вопроса о > 50 ГБ файлов

Предполагается, что все строки короче 7 КБ, и что у вас установлены bash, dd, tail, head, sed и sort из cygwin/unix:

{
  i=0
  while LANG= dd 2>/dev/null bs=1024 skip=${i}000 if=large_text_file count=1021 \
  | LANG= sed -e '1d' -e '$d'  | LANG= sort -u ;
  do
    i=$((1+$i))
  done
  LANG= dd 2>/dev/null bs=1024 skip=${i}000 if=large_text_file count=1021 \
  | LANG= tail -n 1
  LANG= head -n 1 large_text_file
} | LANG= sort -u > your_result

Это делит файл на куски по 1024000 байт и добавляет также 3 * 7 * 1024 байт ("21" в 1021) из следующего куска. Поскольку подразделения могут разрезать линию, первая (1d) и последняя ($ d) строки каждого кунка уничтожаются (sed).

Таким образом, чтобы компенсировать, что-то, содержащее последний кусок, извлекается снова, и сохраняется только его последняя строка (tail -n 1), и первая строка также извлекается снова (head -n 1).

Когда цикл терпит неудачу, последний кусок был извлечен.

sort -u может рассматриваться как компрессор, но он только сортирует свои данные и пропускает дубликаты. Первая "сортировка" сжимает все куски. Второй sort снова сжимает конкатенации всех этих кусков (и этот второй sort отсутствует в приведенном выше коде после третьего редактирования, извините).

Вы сказали, текстовый файл, но я все равно предполагаю двоичный файл, следовательно, LANG = (также все быстрее).

0

Вы можете удалить повторяющиеся строки в огромном файле с помощью PilotEdit.

0

Я нашел инструмент под названием PilotEdit, который смог это сделать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .