¿Cuál es el límite de escalabilidad razonable de 'sort -u'? (en dimensiones de "longitud de línea", "cantidad de líneas", "tamaño de archivo total"?)
¿Cuál es la alternativa de Unix para archivos que exceden esto en la dimensión de "cantidad de líneas"? (Por supuesto, puedo implementar fácilmente uno, pero me preguntaba si hay algo que se pueda hacer con pocos comandos estándar de Linux).
uniq
antes de lassort -u
ayudas. Por cierto, para los datos ASCIILC_ALL=C sort
, GNU acelerasort
muchísimo (vea esta respuesta )Respuestas:
Lo
sort
que encuentra en Linux proviene del paquete coreutils e implementa una fusión externa R-Way . Divide los datos en fragmentos que puede manejar en la memoria, los almacena en el disco y luego los fusiona. Los fragmentos se realizan en paralelo, si la máquina tiene los procesadores para eso.Entonces, si hubiera un límite, es el espacio libre en el disco que
sort
puede usar para almacenar los archivos temporales que tiene que combinar, combinados con el resultado.fuente
sort -o file file
)No puedo hablar de implementaciones específicas del proveedor, pero la
UNIX sort
implementación divide archivos grandes en archivos más pequeños, clasifica estos archivos y luego combina los archivos más pequeños ordenados en una salida ordenada agregada.La única limitación es el espacio en disco para los archivos más pequeños creados de forma intermedia
sort
, pero los archivos se pueden redirigir a un directorio arbitrario configurando la variable de entornoTMPDIR
.fuente
man largefile
enumerasort
como archivo de gran tamaño.sort
? ¿O alguna derivada de alguna versión del tipo AT&T Unix? ¿O alguna versión certificada de Unix desort
(como GNUsort
en OS / X)?sort
implementaciones modernas con respecto a los caracteres de varios bytes puede variar, el hecho de quesort
use archivos intermedios divididos es común a todas las implementaciones de UNIX que se basan en el código original. Por cierto: la versión de Solaris es OSS como "OpenSolaris", consulte sourceforge.net/p/schillix-on/schillix-on/ci/default/tree/usr/…Basado en https://blog.mafr.de/2010/05/23/sorting-large-files/ y /unix//a/88704/9689 :
Actualizar:
De las respuestas anteriores vemos que
sort
ya hace lo que mencionó el fragmento, es decir , la fusión externa de R-Way . Entonces, después de todo corriendo solo:Debería ser suficiente
Mis suposiciones actuales (sin verificar el código) sobre los límites son:
(Esta respuesta está marcada como wiki de la comunidad ; ¡siéntase animado a mejorarla! :))
fuente
sort
ordena en paralelo de forma predeterminada (desde 2010 después de esa página a la que está enlazando),--parallel
hay que reducir el número de hilos concurrentes en lugar de permitirsort
determinar el óptimo. Ordenar ya se divide y fusiona internamente de una manera más eficiente. Dudo que la división adicional ayude.