Ordenar con el comando sort
En este post vamos explicar el comando sort, que nos servirá para ordenar líneas de texto de diferentes formas.
Contenidos
Ordenar alfabéticamente
Si ejecutamos el comando sin ninguna opción, realizará una ordenación basada en los caracteres de texto por los que empieza la línea.
Por ejemplo, si ejecutamos sort /etc/passwd veremos que ordena las líneas en función del nombre de usuario, que es la palabra que se encuentra al inicio. Si queremos que la ordenación sea de manera inversa, de la Z a la A, utilizaremos la opción -r
Ordenar numéricamente
En algunas ocasiones necesitamos que la ordenación no interprete los caracteres como simples letras, si no que sepa interpretar números o magnitudes. Supongamos por ejemplo que tenemos un fichero con lo que ocupan los directorios del sistema. Si hacemos una ordenación con sort size_bytes vemos que primero pone todos los que empiezan por 0, luego todos los que empiezan por 1 etc… pero no es una ordenación basada en el numero entero, si no que ordena por el primer carácter, luego por el segundo, etc…
La opción -n nos permite interpretar los números correctamente, de tal forma que si hacemos sort -n size_bytes
ya nos aparecerá ordenado correctamente.
Ordenar por tamaño
Otro caso que se nos podría presentar es que el listado no estuviera en bytes porque son más difíciles de interpretar, sino que estuviera expresado en magnitudes más comprensibles, por ejemplo en k’s, megas, gigas etc…
Si intentamos hacer un sort -n size_h
vemos que se basa en el número, pero no tiene en cuenta la letra que hay después. Para indicarle que las cifras están expresadas en modo “humano”, le indicamos la opción -h. Así, sort -h size_h
sí nos hará una ordenación correcta.
Ordenar por un campo diferente del primero
El comando sort por defecto siempre comenzará a ordenar por los primeros caracteres de cada linea, pero puede que necesitemos ordenar por un campo (o columna) distinto al primero. Para eso utilizaremos la opción -k seguido por el número de columna a ordenar. Si tenemos un fichero con nombres de clientes, por ejemplo:
cat datos.csv
Darryl Montoya
Hakeem Sloan
Edan Noel
Hanae Finch
Nevada Weaver
Kellie Kirby
Aaron Cummings
Rachel Barnett
Ria Stuart
Si hacemos sort datos.csv
tendremos:
Aaron Cummings
Darryl Montoya
Edan Noel
Hakeem Sloan
Hanae Finch
Kellie Kirby
Nevada Weaver
Rachel Barnett
Ria Stuart
Pero podemos ordenar por apellidos con sort -k 2 datos.csv
tendremos:
Rachel Barnett
Aaron Cummings
Hanae Finch
Kellie Kirby
Darryl Montoya
Edan Noel
Hakeem Sloan
Ria Stuart
Nevada Weaver
Ejemplos del comando sort en Linux
Vamos a generar un fichero llamado espacio_logs como root con dos instrucciones:
cd /var/log/
wc *.log > info_logs
Esto nos crea un fichero con las lineas, palabras y caracteres que tiene un fichero de texto. Si hay algún comando que no reconozcas te recomiendo repasar la entrada con los 50 mejores comandos de Linux.
El resultado es (varía según el sistema, este es un ejemplo): cat info_logs
0 0 0 alternatives.log
15 200 1597 auth.log
698 4691 48350 boot.log
481 6280 49578 daemon.log
0 0 0 dpkg.log
89 611 6324 fontconfig.log
28 463 3196 kern.log
610 9371 85621 user.log
1 0 1 vboxadd-install.log
3 20 149 vboxadd-setup.log
1 0 1 vboxadd-uninstall.log
398 3528 25423 Xorg.0.log
344 3104 22689 Xorg.1.log
2668 28268 242929 total
Veamos ahora los resultados de distintas ordenaciones.
Ordenar por cantidad de lineas (primera columna, numérica) sort -n info_logs
0 0 0 alternatives.log
0 0 0 dpkg.log
1 0 1 vboxadd-install.log
1 0 1 vboxadd-uninstall.log
3 20 149 vboxadd-setup.log
15 200 1597 auth.log
28 463 3196 kern.log
89 611 6324 fontconfig.log
344 3104 22689 Xorg.1.log
398 3528 25423 Xorg.0.log
481 6280 49578 daemon.log
610 9371 85621 user.log
698 4691 48350 boot.log
2668 28268 242929 total
Ordenar por nombre de archivo de forma inversa sort -k 4 -r info_logs
344 3104 22689 Xorg.1.log
398 3528 25423 Xorg.0.log
1 0 1 vboxadd-uninstall.log
3 20 149 vboxadd-setup.log
1 0 1 vboxadd-install.log
610 9371 85621 user.log
2668 28268 242929 total
28 463 3196 kern.log
89 611 6324 fontconfig.log
0 0 0 dpkg.log
481 6280 49578 daemon.log
698 4691 48350 boot.log
15 200 1597 auth.log
0 0 0 alternatives.log
Ampliar conocimientos
En la propia wikipedia puedes obtener más información sobre este comando. También en el mejor canal de youtube sobre Linux 😉
Video sobre el comando sort para ordenar en Linux
Si quieres ampliar tus conocimientos de Linux te podrían interesar los siguientes cursos: