Qual é o limite de escalabilidade razoável de 'sort -u'? (nas dimensões "comprimento da linha", "quantidade de linhas", "tamanho total do arquivo"?)
Qual é a alternativa do Unix para arquivos que excedem isso na dimensão "quantidade de linhas"? (É claro que posso implementar facilmente um, mas me perguntei se há algo que pode ser feito com poucos comandos padrão do Linux.)
uniq
antes dasort -u
ajuda. BTW, para dados ASCIILC_ALL=C sort
acelera GNUsort
um lote terrível (veja esta resposta )Respostas:
O
sort
que você encontra no Linux vem do pacote coreutils e implementa uma mesclagem R-Way Externa . Ele divide os dados em pedaços que podem ser manipulados na memória, os armazena em disco e os mescla. Os pedaços são feitos em paralelo, se a máquina tiver os processadores para isso.Portanto, se houver um limite, é o espaço livre em disco que
sort
pode ser usado para armazenar os arquivos temporários a serem mesclados, combinados com o resultado.fonte
sort -o file file
)Não posso falar de implementações específicas do fornecedor, mas a
UNIX sort
implementação divide arquivos grandes em arquivos menores, classifica esses arquivos e combina os arquivos menores classificados em uma saída classificada agregada.A única limitação é o espaço em disco para os arquivos menores criados intermediariamente por
sort
, mas os arquivos podem ser redirecionados para um diretório arbitrário configurando a variável de ambienteTMPDIR
.fonte
man largefile
listasort
como arquivos grandes reconhecidos.sort
? Ou qualquer derivado de alguma versão da classificação AT&T Unix? Ou qualquer versão certificada para Unixsort
(como GNUsort
no OS / X)?sort
implementações modernas em relação aos caracteres de vários bytes pode variar, o fato desort
usar arquivos intermediários divididos é comum a todas as implementações do UNIX baseadas no código original. BTW: a versão Solaris é OSS como "OpenSolaris", consulte sourceforge.net/p/schillix-on/schillix-on/ci/default/tree/usr/…Com base em https://blog.mafr.de/2010/05/23/sorting-large-files/ e /unix//a/88704/9689 :
Atualizar:
Das respostas acima, vemos que
sort
já faz o que mencionou o trecho - ou seja, a fusão externa do R-Way . Então, afinal de contas, apenas:Deve ser suficiente.
Minhas suposições atuais (sem verificar o código) sobre limites são:
(Esta resposta está marcada como wiki da comunidade - sinta-se incentivado a melhorá-la! :))
fonte
sort
classifica em paralelo por padrão (desde 2010 após a página à qual você está vinculando),--parallel
é necessário reduzir o número de threads simultâneos em vez de permitirsort
determinar o melhor. A classificação já faz uma divisão e mesclagem internamente de uma maneira mais eficiente. Duvido que essa divisão extra ajude.