Я шукаю з відкритим вихідним кодом (можливо, 64 біт) вікна текстовий редактор, який дозволить мені видалити дублікати рядків з дуже великий (4 Гб +) текстовий файл.
Що ви використовуєте для видалення дублікатів рядків з великих текстових файлів?
Я шукаю з відкритим вихідним кодом (можливо, 64 біт) вікна текстовий редактор, який дозволить мені видалити дублікати рядків з дуже великий (4 Гб +) текстовий файл.
Що ви використовуєте для видалення дублікатів рядків з великих текстових файлів?
Відповіді:
Зручний портал Win32 sort
є в UnxUtils
Для більш складних значень "видалення дублікатів" є Perl (et al).
Якщо у вас є Cygwin або MinGW, ви могли б виконати це з
cat file | sort | uniq >> outfile
припускаючи, що вам потрібні унікальні рядки. Я не знаю, як це буде виконуватися, оскільки сортування набору даних, яке велике, ймовірно, займе тривалий час (або, якщо воно вже відсортоване, можна просто залишити цю частину) або як саме ці команди функціонують (якщо вони споживатимуть 4 Гб баран чи ні).
Я також розмістив цю відповідь на дублікат питання & gt; 50 Гб файлів
Припускаючи, що всі рядки коротше, ніж 7kB, а у вас є bash, dd, tail, head, sed і сортування встановлено з 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 = (все стає все швидше).