El comando sort
es una herramienta para ordenar el contenido de archivos e imprimir el resultado en la salida estándar. Reordenar el contenido de un archivo numérica o alfabéticamente y organizar la información en orden ascendente o descendente mejora la legibilidad.
En este tutorial, aprenderás a usar el comando sort
de Linux y verás ejemplos útiles.
Sintaxis de sort de Linux
El comando sort
tiene la siguiente sintaxis:
sort [opciones] nombre_del_archivo
Nota: Si bien el comando
sort
organiza los datos en el orden especificado, el comandogrep
muestra u oculta la información especificada. Sigue nuestro tutorial para aprender a usar el comando grep.
Ejecutar el comando sort
sin [opciones]
genera el contenido del archivo y aplica las reglas de ordenación predeterminadas para la configuración regional actual.
Las reglas principales son:
- Las líneas que comienzan con un número van antes de las líneas que comienzan con una letra, organizadas en orden ascendente (1-10).
- Las líneas que comienzan con letras se ordenan en orden alfabético ascendente (A-Z).
Por ejemplo, considera el archivo predeterminado.txt
con el siguiente contenido:
1 esta línea comienza con un número.
A esta línea comienza con una letra mayúscula.
a esta línea comienza con la misma letra, pero minúscula.
G esta línea también comienza con una letra mayúscula.
b esta línea comienza con una letra minúscula.
f esta línea también comienza con una letra minúscula.
3 esta línea comienza con un número.
Usa el comando cat
para mostrar el contenido del archivo:
cat predeterminado.txt
Ejecuta sort
para organizar el contenido de predeterminado.txt
de manera predeterminada:
sort predeterminado.txt
Salida:
1 esta línea comienza con un número.
3 esta línea también comienza con un número.
A esta línea comienza con una letra mayúscula.
G esta línea también comienza con una letra mayúscula.
a esta línea comienza con la misma letra, pero minúscula.
b esta línea comienza con una letra minúscula.
f esta línea también comienza con una letra minúscula.
El ejemplo muestra cómo sort
organiza las líneas: primero los números (en orden ascendente) y luego las letras (en orden alfabético).
Nota: El comando sort
asume que los datos están en formato ASCII. La configuración regional afecta la codificación y la ordenación de los caracteres. Por ejemplo, para ordenar las letras mayúsculas primero, establece la variable de entorno LC_ALL
en la configuración regional POSIX (C). Ejecuta LC_ALL=C
para establecer la variable de entorno.
Opciones de sort de Linux
Especifica una opción para cambiar las reglas de ordenación del comando sort
. Las opciones más utilizadas se enumeran en la tabla a continuación:
Forma de opción corta | Forma de opción larga | Descripción |
---|---|---|
-b | --ignore-leading-blanks | Ignora los espacios en blanco iniciales. |
-d | --dictionary-order | Considera solo espacios en blanco y caracteres alfanuméricos. |
-f | --ignore-case | Ignora mayúsculas y minúsculas, tratando minúsculas como mayúsculas. |
/ | --files0-from=F | Lee entrada de archivos con nombres terminados en NUL en el archivo F. Si F es -, lee de la entrada estándar. |
-M | --month-sort | Ordena según meses (Ene-Dic). |
-h | --human-numeric-sort | Compara números legibles por humanos (ej., 2K, 1G). |
-n | --numeric-sort | Compara según valores numéricos. |
-R | --random-sort | Ordena usando un hash aleatorio, agrupando claves idénticas. |
/ | --random-source=FILE | Obtiene bytes aleatorios del archivo especificado. |
-r | --reverse | Invierte el orden de comparación. |
/ | --sort=WORD | Ordena según WORD: general-numeric -g, human-numeric -h, month -M, numeric -n, random -R, version -V. |
-c | --check, --check=diagnose-first | Comprueba si la entrada está ordenada, sin ordenarla. |
/ | --debug | Anota la parte de la línea usada para ordenar. |
-k | --key=KEYDEF | Ordena usando la clave KEYDEF (ubicación y tipo). |
-m | --merge | Combina archivos ya ordenados. |
-o | --output=FILE | Redirige la salida a FILE en lugar de la salida estándar. |
-t | --field-separator=SEP | Usa SEP como separador en lugar de espacios. |
-z | --zero-terminated | Usa NUL como delimitador de línea. |
/ | --help | Muestra la ayuda y sale. |
/ | --version | Muestra la versión y sale. |
Ejemplos de sort de Linux
A continuación, se muestran ejemplos del uso del comando sort
para organizar el contenido de los archivos de diferentes maneras.
Ejemplo 1: Guardar la salida en un archivo
El comando sort
muestra el contenido ordenado, pero no modifica el archivo original. Usa la opción -o
para guardar la salida en un archivo.
Por ejemplo, ordena predeterminado.txt
y guarda el resultado en ordenado.txt
:
sort -o ordenado.txt predeterminado.txt
Ejecuta cat
para ver el contenido de ordenado.txt
:
cat ordenado.txt
Salida:
1 esta línea comienza con un número.
3 esta línea comienza con un número.
A esta línea comienza con una letra mayúscula.
G esta línea también comienza con una letra mayúscula.
a esta línea comienza con la misma letra, pero minúscula.
b esta línea comienza con una letra minúscula.
f esta línea también comienza con una letra minúscula.
Alternativamente, redirige la salida con >
:
sort predeterminado.txt > ordenado.txt
Ejemplo 2: Comprobar la ordenación en un archivo
Usa la opción -c
para verificar si un archivo está ordenado. Si está ordenado, no hay salida. Si no, sort
indica la primera línea desordenada.
Por ejemplo, con predeterminado.txt
:
sort -c predeterminado.txt
Salida:
sort: predeterminado.txt:3: disorder: a esta línea comienza con la misma letra, pero minúscula.
El mensaje indica que la línea 2 (10
) está fuera de lugar según el orden predeterminado.
Ejemplo 3: Ordenar varios archivos
Hay dos maneras de ordenar múltiples archivos:
- Listar nombres de archivo como argumentos separados por espacios:
Ordena varios archivos simultáneamente especificando los nombres de los archivos respectivos como argumentos, separados por espacios en blanco.
El contenido de los archivos se une, se ordena y se imprime en la salida estándar. Por ejemplo:
sort predeterminado1.txt predeterminado2.txt
Usando sort
para organizar el contenido de múltiples archivos simultáneamente. El comando concatena, ordena e imprime el contenido de ambos archivos.
- Canalizar la salida del comando
find
asort
:
Otra manera de ordenar varios archivos simultáneamente es canalizar la salida del comando find
a sort
y usar la opción --files0-from=
en el comando sort
.
Especifica la opción -print0
en find
para que el nombre del archivo termine con el carácter NUL y asegurar que el programa lea correctamente la lista de archivos.
Por ejemplo:
find -name "predeterminado?.txt" -print0 | sort --files0-from=-
Canalizando la salida del comando find
a sort
para organizar el contenido de múltiples archivos simultáneamente. El ejemplo anterior concatena y ordena los archivos predeterminado1.txt
y predeterminado2.txt
.
Ejemplo 4: Ordenar por campos
Por defecto, sort
compara líneas completas. Usa -k
para ordenar por un campo específico.
Considera escuela.txt
:
1 John Profesor
2 Alice Supervisor
3 Millie Conserje
4 Bob Contador
5 Lisa Secretaria
6 Mike Estudiante
Muestra el contenido:
cat escuela.txt
Ordena por el segundo campo (asignatura):
sort -k 2,2 escuela.txt
Salida:
2 Alice Supervisor
4 Bob Contador
1 John Profesor
5 Lisa Secretaria
6 Mike Estudiante
3 Millie Conserje
Nota: Si hay espacios en blanco iniciales, usa
-b
para ignorarlos.
Ejemplo 5: Ordenar en orden inverso
Usa -r
para invertir el orden. Con predeterminado.txt
:
sort predeterminado.txt
Salida:
1 esta línea comienza con un número.
3 esta línea comienza con un número.
A esta línea comienza con una letra mayúscula.
G esta línea también comienza con una letra mayúscula.
a esta línea comienza con la misma letra, pero minúscula.
b esta línea comienza con una letra minúscula.
f esta línea también comienza con una letra minúscula.
Ahora con -r
:
sort -r predeterminado.txt
Salida:
f esta línea también comienza con una letra minúscula.
b esta línea comienza con una letra minúscula.
a esta línea comienza con la misma letra, pero minúscula.
G esta línea también comienza con una letra mayúscula.
A esta línea comienza con una letra mayúscula.
3 esta línea comienza con un número.
1 esta línea comienza con un número.
Ejemplo 6: Eliminar entradas duplicadas
Usa -u
para eliminar líneas duplicadas. Considera prueba.txt
:
Hola
Hola
Bienvenido a Adictosalinux
Este es el tutorial del comando sort.
Muestra el contenido:
cat prueba.txt
Ordena y elimina duplicados:
sort -u prueba.txt
Salida:
Bienvenido a Adictosalinux
Este es el tutorial del comando sort.
Hola
Ejemplo 7: Ordenar por meses
Especifica la opción -M
para organizar los datos según los meses que aparecen en un archivo.
ls -l > orden-mes.txt
Redireccionando la salida del comando ls
a un archivo.
Ordena los datos de la salida de ls -l
por meses ejecutando el siguiente comando:
sort -Mk6 orden-mes.txt
Ordenando el contenido de un archivo basado en los meses especificados en el archivo. El comando ordena el contenido del archivo basado en el sexto campo, que contiene el mes de creación del archivo.
Ejemplo 8: Ordenar datos aleatoriamente
Usa la opción -R
para organizar los datos aleatoriamente sin aplicar ningún criterio de ordenación.
Por ejemplo, el siguiente archivo contiene varias líneas ordenadas numéricamente: ordenado.txt
:
1 la primera línea
2 la segunda línea
3 la tercera línea
4 la cuarta línea
5 la quinta línea
6 la sexta línea
7 la séptima línea
Mezcla el orden de las líneas con el siguiente comando:
sort -R ordenado.txt
5 la quinta línea
2 la segunda línea
7 la séptima línea
1 la primera línea
3 la tercera línea
6 la sexta línea
4 la cuarta línea
Ordenando aleatoriamente el contenido de un archivo usando el comando sort
. La salida muestra que los datos ahora están ordenados aleatoriamente.
Ejemplo 9: Especificar un delimitador
sort
separa los campos en una línea usando espacios en blanco (espacios o tabulaciones) como delimitadores de campo. Especifica la opción -t
para cambiar el delimitador de campo a un carácter diferente.
Por ejemplo, el siguiente archivo contiene múltiples campos, incluyendo el nombre de una persona, su puesto de trabajo y su lugar de residencia: escuela.txt
:
1,John,Profesor,Ciudad de México
2,Alice,Supervisora,Buenos Aires
3,Willie,Conserje,Santiago
4,Bob,Contador,Bogotá
5,Lisa,Secretaria,Lima
6,Mike,Estudiante,São Paulo
Ordenar el archivo por lugar de residencia sin cambiar el delimitador no funciona porque algunas ciudades tienen un espacio en medio de su nombre. El espacio hace que sort
interprete el nombre de la ciudad como dos campos en lugar de uno.
Cambia el delimitador a una coma (,
) para ordenar correctamente el contenido del archivo:
sort -t, -k4 escuela.txt
4,Bob,Contador,Bogotá
2,Alice,Supervisora,Buenos Aires
1,John,Profesor,Ciudad de México
5,Lisa,Secretaria,Lima
6,Mike,Estudiante,São Paulo
3,Willie,Conserje,Santiago
Cambiando el delimitador predeterminado en el comando sort
. Cambiar el delimitador produce la salida deseada.
Ejemplo 10: Ordenar una salida de flujo
Otra manera de proporcionar entrada al comando sort
es usar el operador de tubería (|
). Canalizar a sort
le permite organizar la salida de otro comando y, opcionalmente, guardar los resultados en un archivo.
El siguiente ejemplo muestra cómo canalizar la salida del comando ls
a sort
y organizar el contenido por tamaño de archivo:
ls -l /home/$USER | sort -nk5
Las opciones -nk5
especifican la ordenación numérica en el quinto campo.
Conclusión
Este tutorial mostró cómo usar el comando sort
para reorganizar eficazmente el contenido de un archivo. Organiza fácilmente conjuntos de datos grandes en orden ascendente o descendente usando sort
.
Para más comandos de Linux y una hoja de trucos en PDF descargable, consulta nuestra hoja de trucos de comandos de Linux.
¿Qué te parece?
Es bueno conocer tu opinión. Deja un comentario.