Com base no link e link :
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
Atualização:
A partir das respostas acima, vemos que sort
já faz o que foi mencionado no snippet, ou seja, mesclagem externa de R-Way . Então, depois de tudo correndo apenas:
sort --parallel="$(nproc --all)" -u input > output
Deve ser suficiente.
Minhas suposições atuais (sem código de verificação) sobre limites são:
O comprimento máximo da linha é limitado pela quantidade de memória física. Ordenar precisa encaixar pelo menos dois na memória
- quantidade de linhas - não estou ciente de
- tamanho do arquivo - claro, por sistema de arquivos
- quantidade de arquivos abertos em paralelo - dependendo do sistema operacional (obrigado Diomidis Spinellis por apontar isso !)
(Esta resposta está marcada como wiki da comunidade - sinta-se encorajado a melhorá-lo! :))