У меня есть файл 70 ГБ с 400 миллионами строк + (JSON).Моя конечная цель - удалить дубликаты строк, чтобы у меня была полностью «лишенная дубликата» версия файла.Я делаю это на машине с 8 ядрами и оперативной памятью 64 ГБ.
Я также расширяю эту тему, ', как сортировать дубликаты из массивного списка '.
Вещи, которые я пробовал:
- Neek - javascript быстро исчерпывает память
- Использование Awk (кажется, не работает для этого)
- с использованием Perl (perl -ne 'print, если $ dup {$ _} ++;') - опять же, не хватает памяти
sort -u largefile > targetfile
, похоже, не работает.Я думаю, что файл слишком велик.
Текущий подход:
- Разделите файлы на куски по 5 миллионов строк каждый.
- Сортировка / Uniq каждого из файлов
for X in *; do sort -u --parallel=6 $X > sorted/s-$X; done
Теперь у меня есть 80 отдельно отсортированных файлов.Я пытаюсь повторно объединить их, используя сортировку -m.Это, похоже, ничего не делает, так как размер файла / строки в итоге остается прежним.
Поскольку сортировка -m не работает, я сейчас пытаюсь это сделать:
cat *.json | sort > big-sorted.json
, тогда я попытаюсь запустить uniq с
uniq big-sorted.json > unique-sorted.json
На основепрошлый опыт, я не верю, что это будет работать.
Какой здесь лучший подход?Как мне заново объединить файлы и удалить все повторяющиеся строки на этом этапе.
Обновление 1 Как я и подозревал, cat * |сортировка> бигфайл не сработал.Он просто скопировал все в один файл, как он был ранее отсортирован (в отдельных файлах).
Обновление 2: Я также попробовал следующий код:
cat *.json | sort --parallel=6 -m > big-sorted.json
Результат был таким же, как и в предыдущем обновлении.Я свежий из идей.
Спасибо!