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_archivoNota: Si bien el comando
sortorganiza los datos en el orden especificado, el comandogrepmuestra 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.txtEjecuta sort para organizar el contenido de predeterminado.txt de manera predeterminada:
sort predeterminado.txtSalida:
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.txtEjecuta cat para ver el contenido de ordenado.txt:
cat ordenado.txtSalida:
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.txtEjemplo 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.txtSalida:
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
findasort:
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 EstudianteMuestra el contenido:
cat escuela.txtOrdena por el segundo campo (asignatura):
sort -k 2,2 escuela.txtSalida:
2 Alice Supervisor
4 Bob Contador
1 John Profesor
5 Lisa Secretaria
6 Mike Estudiante
3 Millie ConserjeNota: Si hay espacios en blanco iniciales, usa
-bpara ignorarlos.
Ejemplo 5: Ordenar en orden inverso
Usa -r para invertir el orden. Con predeterminado.txt:
sort predeterminado.txtSalida:
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.txtSalida:
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.txtOrdena y elimina duplicados:
sort -u prueba.txtSalida:
Bienvenido a Adictosalinux
Este es el tutorial del comando sort.
HolaEjemplo 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.txtRedireccionando 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.txtOrdenando 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íneaMezcla el orden de las líneas con el siguiente comando:
sort -R ordenado.txt5 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íneaOrdenando 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 PauloOrdenar 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.txt4,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,SantiagoCambiando 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 -nk5Las 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.