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-npara 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.-kcampo: especifica la columna o campo sobre el que se debe ordenar. Se puede indicar un rango como-k2,4para considerar desde la segunda hasta la cuarta columna.-tdelimitador: define el carácter que separa los campos. Por defecto, cualquier espacio en blanco o tabulación actúa como delimitador, pero con-tse 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=Csi 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 archivodevuelve código de salida 0 cuando está correctamente ordenado y 1 en caso contrario, lo que permite usarlo en pruebas de scripts. - Combine
sortcongrepoawkpara 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» conLC_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.