Сортировка и удаление дубликатов из одного или нескольких больших файлов - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть файл 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

Результат был таким же, как и в предыдущем обновлении.Я свежий из идей.

Спасибо!

1 Ответ

0 голосов
/ 01 января 2019

После некоторых проб и ошибок я нашел решение:

sort -us -o out.json infile.json
...