На основании https://blog.mafr.de/2010/05/23/sorting-large-files/ и /unix//a/88704/9689 :
split -n l/20 input input-
for inpf in input-* ; do
sort --parallel="$(nproc --all)" "${inpf}" > sorted-"{$inpf}"
done
sort -m sorted-input-* > sorted-input
Обновить:
Из ответов выше мы видим, что sort
уже делает то, что упомянул фрагмент - т.е. слияние внешнего R-Way . Так ведь работает всего лишь:
sort --parallel="$(nproc --all)" -u input > output
Должно быть достаточно.
Мои текущие предположения (без проверки кода) об ограничениях:
- Максимальная длина строки ограничена объемом физической памяти. Сортировать нужно вписать как минимум две в память
- количество строк - я не в курсе
- размер файла - конечно, по файловой системе
- количество открытых файлов параллельно - в зависимости от операционной системы (спасибо Diomidis Spinellis за то, что указал на это!)
(Этот ответ помечен как вики сообщества - чувствую себя лучше, чтобы улучшить его! :))