El comando sort en Linux: cómo ordenar líneas de texto de forma eficaz

Introducción

El comando sort es una de las utilidades más usadas en la línea de comandos de Linux. Permite ordenar líneas de texto de forma rápida y eficiente, ya sea que provengan de un archivo, de la salida de otro programa o de la entrada estándar. Su funcionamiento se basa en comparar los caracteres de cada línea según el conjunto de opciones que se le indique, lo que lo convierte en una herramienta indispensable para el procesamiento de logs, archivos CSV, listas de usuarios y cualquier otro tipo de datos estructurados en forma de líneas.

Aunque a primera vista parece sencillo, sort ofrece una gran cantidad de opciones que permiten adaptar su comportamiento a necesidades específicas: ordenamiento numérico, inverso, eliminación de duplicados, ordenamiento por columnas específicas, según el idioma o incluso usando un tamaño de búfer personalizado. Conocer estas opciones ayuda a escribir scripts más eficientes y a evitar post‑procesamientos innecesarios.

Sintaxis básica

La forma más simple de usar sort es:

sort [opciones] archivo

Si no se especifica ningún archivo, el comando lee desde la entrada estándar, lo que permite combinarlo con tuberías (|) y redirecciones. Por defecto, sort ordena de forma ascendente usando el orden lexicográfico basado en el código ASCII o UTF‑8, según la configuración del entorno.

Un ejemplo rápido:

sort nombres.txt

Esta ordena alfabéticamente el contenido de nombres.txt y muestra el resultado en la pantalla.

Opciones más usadas

  • -n: ordena numéricamente, tratando cada línea como un número. Ideal para listas de edades, puntuaciones o direcciones IP cuando se quiere que 10 quede antes de 2.
  • -r: invierte el orden de salida, obteniendo una lista descendente. Se puede combinar con -n para obtener los valores más altos primero.
  • -u: elimina líneas duplicadas después de ordenar. Es útil para obtener un conjunto único de valores, por ejemplo, una lista de usuarios sin repeticiones.
  • -k campo: especifica la columna o campo sobre el que se debe ordenar. Se puede indicar un rango como -k2,4 para considerar desde la segunda hasta la cuarta columna.
  • -t delimitador: define el carácter que separa los campos. Por defecto, cualquier espacio en blanco o tabulación actúa como delimitador, pero con -t se puede usar una coma, punto y coma o cualquier otro símbolo.
  • -M: ordena según los nombres de los meses abreviados (Ene, Feb, Mar…), útil para logs que contienen fechas en formato textual.

Ejemplos prácticos

Ordenar un archivo de texto sencillo:

sort lista.txt

Ordenar de forma numérica y eliminar duplicados:

sort -nu numeros.txt

Ordenar según el segundo campo de un CSV separado por comas:

sort -t, -k2 datos.csv

Ordenar meses abreviados:

sort -M meses.txt

Ordenar por columnas

Cuando el archivo contiene varias columnas, la opción -k permite especificar exactamente qué campo usar como clave de ordenamiento. La sintaxis es -kinicio[tipo][,fin[tipo]]. Por ejemplo, -k2,2 ordena usando únicamente la segunda columna, mientras que -k2,3 considera la segunda y la tercera como clave compuesta. Si se omite el tipo, se asume el orden lexicográfico; añadir n (-k2n) fuerza una comparación numérica para ese campo.

Ejemplo con un archivo de log donde el noveno campo es el tamaño de la respuesta:

sort -k9n acceso.log

Esto ordena las entradas desde la respuesta más pequeña a la más grande. Si se necesita invertir el orden, basta con añadir -r:

sort -k9nr acceso.log

Combinar sort con otros comandos

Para obtener las diez direcciones IP que más aparecen en un log de acceso:

awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10

En esta cadena, el primer sort agrupa las IP iguales, uniq -c cuenta las ocurrencias y un segundo sort -nr ordena de forma numérica y descendente para mostrar las más frecuentes primero.

Para ordenar el resultado de ls -l por tamaño de archivo:

ls -l | sort -k5nr

Aquí el quinto campo corresponde al tamaño en bytes; -k5nr indica orden numérico y descendente.

Consejos y trucos

  • Use siempre LC_ALL=C si necesita un ordenamiento basado únicamente en bytes y quiere evitar sorpresas con localizaciones que puedan cambiar el orden de caracteres especiales.
  • Para archivos muy grandes, controle la memoria usada con la opción -S (por ejemplo, -S 50% para usar hasta la mitad de la RAM disponible) y el directorio de trabajo con -T.
  • Si solo necesita saber si un archivo está ordenado, sort -c archivo devuelve código de salida 0 cuando está correctamente ordenado y 1 en caso contrario, lo que permite usarlo en pruebas de scripts.
  • Combine sort con grep o awk para filtrar antes de ordenar y reducir la carga de trabajo.
  • En entornos donde el locale afecta el orden (por ejemplo, español con es_ES.UTF-8), fuerce el orden «C» con LC_COLLATE=C sort archivo.

Conclusión

El comando sort es una pieza esencial del arsenal de cualquier administrador de sistemas o desarrollador que trabaje en Linux. Su flexibilidad, gracias a opciones como -n, -r, -k y -t, permite adaptarlo a casi cualquier escenario de ordenamiento de líneas de texto. Dominar su uso no solo ahorra tiempo, sino que también abre la puerta a combinaciones poderosas con otras utilidades de la shell, mejorando la eficiencia de los scripts y el procesamiento de datos en el día a día.

Ya sea que necesite organizar logs, preparar informes, depurar datos o simplemente mantener sus archivos ordenados, sort ofrece una solución rápida, confiable y altamente configurable. Practicar con los ejemplos presentados y explorar las opciones menos usadas le permitirá sacarle el máximo provecho a esta herramienta clásica.

Esta obra está bajo una Licencia Creative Commons Atribución 4.0 Internacional para Francesc Roig francesc@vivaldi.net .

EspañolesEspañolEspañol