Quelle est la limite d'évolutivité raisonnable de «sort -u»? (en "longueur de ligne", "nombre de lignes", "taille totale du fichier"?)
Quelle est l'alternative Unix pour les fichiers dépassant cette dimension de "quantité de lignes"? (Bien sûr, je peux facilement en implémenter un, mais je me demandais s'il y avait quelque chose qui pouvait être fait avec quelques commandes Linux standard?)
uniq
avant l'sort -u
aide. BTW, pour les données ASCIILC_ALL=C sort
accélèresort
énormément GNU (voir cette réponse )Réponses:
Le
sort
que vous trouvez sur Linux provient du package coreutils et implémente une fusion External R-Way . Il divise les données en morceaux qu'il peut gérer en mémoire, les stocke sur disque puis les fusionne. Les morceaux se font en parallèle, si la machine a les processeurs pour ça.Donc, s'il devait y avoir une limite, c'est l'espace disque libre qui
sort
peut être utilisé pour stocker les fichiers temporaires qu'il doit fusionner, combiné au résultat.la source
sort -o file file
)Je ne peux pas parler d'implémentations spécifiques au fournisseur, mais l'
UNIX sort
implémentation divise les fichiers volumineux en fichiers plus petits, trie ces fichiers, puis combine les fichiers triés plus petits en une sortie triée agrégée.La seule limitation est l'espace disque pour les fichiers plus petits créés de façon intermédiaire par
sort
, mais les fichiers peuvent être redirigés vers un répertoire arbitraire en définissant la variable d'environnementTMPDIR
.la source
man largefile
répertoriesort
les fichiers volumineux.sort
? Ou tout dérivé d'une version du genre AT&T Unix? Ou toute version certifiée Unix desort
(comme GNUsort
sur OS / X)?sort
implémentations modernes par rapport aux caractères multi-octets peut varier, le fait d'sort
utiliser des fichiers intermédiaires fractionnés est commun à toutes les implémentations UNIX basées sur le code d'origine. BTW: la version Solaris est OSS comme "OpenSolaris", voir sourceforge.net/p/schillix-on/schillix-on/ci/default/tree/usr/…Basé sur https://blog.mafr.de/2010/05/23/sorting-large-files/ et /unix//a/88704/9689 :
Mise à jour:
D'après les réponses ci-dessus, nous voyons que fait
sort
déjà l'extrait mentionné - c'est-à-dire la fusion externe de R-Way . Donc, après tout, il suffit de courir:Devrait être suffisant.
Mes hypothèses actuelles (sans vérifier le code) sur les limites sont les suivantes:
(Cette réponse est marquée comme wiki communautaire - n'hésitez pas à l'améliorer! :))
la source
sort
trie en parallèle par défaut (depuis 2010 après cette page vers laquelle vous créez un lien),--parallel
il s'agit de réduire le nombre de threads simultanés au lieu de laissersort
déterminer celui qui est optimal. Le tri effectue déjà un fractionnement et une fusion en interne de manière plus efficace. Je doute que ce fractionnement supplémentaire soit utile.