Saltar al contenido

¿Cómo podría el comando sort de UNIX ordenar un archivo muy grande?

La guía o código que encontrarás en este post es la resolución más eficiente y válida que encontramos a tu duda o dilema.

Solución:

Los detalles algorítmicos del comando UNIX Sort indican que Unix Sort usa un algoritmo de clasificación de fusión R-Way externo. El enlace entra en más detalles, pero en esencia divide la entrada en porciones más pequeñas (que encajan en la memoria) y luego fusiona cada porción al final.

El sort El comando almacena datos de trabajo en archivos de disco temporales (generalmente en /tmp).

ADVERTENCIA: Este script inicia un shell por fragmento, para archivos realmente grandes, esto podría ser cientos.


Aquí hay un guión que escribí para este propósito. En una máquina de 4 procesadores, mejoró el rendimiento de clasificación en un 100%.

#! /bin/ksh

MAX_LINES_PER_CHUNK=1000000
ORIGINAL_FILE=$1
SORTED_FILE=$2
CHUNK_FILE_PREFIX=$ORIGINAL_FILE.split.
SORTED_CHUNK_FILES=$CHUNK_FILE_PREFIX*.sorted

usage ()

     echo Parallel sort
     echo usage: psort file1 file2
     echo Sorts text file file1 and stores the output in file2
     echo Note: file1 will be split in chunks up to $MAX_LINES_PER_CHUNK lines
     echo  and each chunk will be sorted in parallel


# test if we have two arguments on the command line
if [ $# != 2 ]
then
    usage
    exit
fi

#Cleanup any lefover files
rm -f $SORTED_CHUNK_FILES > /dev/null
rm -f $CHUNK_FILE_PREFIX* > /dev/null
rm -f $SORTED_FILE

#Splitting $ORIGINAL_FILE into chunks ...
split -l $MAX_LINES_PER_CHUNK $ORIGINAL_FILE $CHUNK_FILE_PREFIX

for file in $CHUNK_FILE_PREFIX*
do
    sort $file > $file.sorted &
done
wait

#Merging chunks to $SORTED_FILE ...
sort -m $SORTED_CHUNK_FILES > $SORTED_FILE

#Cleanup any lefover files
rm -f $SORTED_CHUNK_FILES > /dev/null
rm -f $CHUNK_FILE_PREFIX* > /dev/null

Consulte también: “Ordenar archivos grandes más rápido con un script de shell”

Comentarios y calificaciones del post

Si posees alguna sospecha o disposición de reformar nuestro sección puedes dejar una crítica y con placer lo estudiaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *