Bienvenidos a esta nueva entrada que va a formar parte del curso gratuito de #GNULinux que se encuentra en el menú del blog y que denominamos Conociendo el comando sort para usar en bash, ya que este comando lo podemos ejecutar en la terminal como lo vimos anteriormente o bien utilizarlo dentro de un bash que es lo que luego vamos a ir practicando. Manos a la obra y arrancamos con el comando sort

hoy vemos el comando sort

El comando sort sirve para ordenar devolviendo a su salida estándar el resultado. Hasta acá pura sarasa no?

Si queres saber algo de sort siempre puedes recurrir a su manual:

man sort
man sort ordenado de archivos y lineas
ejecutando man sort en un terminal

Vamos a pasar un poquito al castellano lo que dice el manual:

  • -c Comprueba si los archivos están ordenados, y si es así, no se genera ninguna salida.
  • -m Fusiona los archivos especificados. Asume que ya están ordenados.
  • -u Elimina las líneas repetidas.
  • -o archivo Especifica el nombre del archivo de salida. Si no se especifica es la salida estándar.
  • -d Solo considera letras, cifras y espacios en blanco. No caracteres especiales.
  • -f Trata mayúsculas y minúsculas como iguales.
  • -i Ignora los caracteres no imprimibles de las claves de ordenación.
  • -M Trata la clave de ordenación como si fuera un mes. MAY es menor que JUN, que a su vez es menor que JUL, y así sucesivamente.
  • -n Especifica que una clave es numérica, es decir, realiza la ordenación numérica.
  • -r Invierte el orden de ordenación.
  • -tcar Utiliza car como separador de campo en vez de tabuladores o blancos.
  • -b Ignora blancos en la clave de ordenación.
  • +num Comienza la ordenación por el campo de posición num. Recordar que el primer campo es el cero.
  • -num Detiene la comparación antes del campo de posición num. Ese campo no lo utiliza para ordenar.

Pero para saber lo mejor es leer poquito y practicar mucho por eso les dejo algunos ejemplos recordando la sintaxis:

Su sintaxis general es:

sort -t delimitador -kcampo.carácter opción(s) archivo

Voy a crear un archivo llamado probandosort.txt y dentro va a tener este contenido:

Luis 38
Juan 43
Monica 22
Arturo 89
Guillermina 65
Juana 35
probando sort para ordenar lineas de un archivo
probando sort para ordenar lineas de un archivo

Como ven en la imagen anterior luego de crearse el archivo se hace un cat para ver como es el contenido original y después con sort para ver como queda ordenado, por lo que vemos ordeno alfabéticamente.

Una pequeña modificacion del archivo para seguir jugando:

probando sort

La idea fue que tengan todos la misma cantidad de caracteres para jugar con sort.

Vamos a hacer que ordene desde el 5 caracter que siempre para todos los casos va a ser un numero:

sort -k1.5 probandosort.txt

Como estábamos al principio se podría haber logrado lo mismo? Claro que si pero la idea es hacerlos jugar con el texto. Miren:

sort -k2.1
ordenando por la columna 2 item 1

Como ven en la imagen anterior mostramos que usando -k2.1 lo que hace es ir a la columna 2 y desde el primer dijito ordenar.

Ahora listemos la carpeta que queramos y los ordenamos por tamaño de archivo:

ls -l | sort +4n
sort

Como ven ser ordeno los archivos que tengo dentro de la carpeta bashblog que utilizo para ir jugando un poco.

Si lo mismo lo quisieramos invertir, o sea de mayor a menor, utilizariamos:

ls -l | sort -r +4n

Cuando usamos sort +7 increiblemente (y en el manual no lo lei capaz esta y lo pase de largo) ordena por nombre de archivo:

ls -l | sort +7

Un uso que me pareció piola es el ordenar desde un digito que expresamos y de ahi comenzar a contar para el orden. Por ejemplo, si hacemos un cat /etc/passwd

Obviamente este resultado es mucho mas largo pero justo para mostrar nos viene bien no tener que leer tanto. Como ven hay separaciones con : entonces con sort vamos a hacer:

cat /etc/passwd| sort -t":" -k3n

El tema es entender -k3n que significa ordenar por la columna 3 y la n es que el orden sea numerico.

Otro asunto interesante es eliminar las lineas repetidas de un archivo o de un resultado que le pasemos:

sort -u archivo

por ultimo si estoy trabajando con un archivo y quiero eliminar las lineas podria hacer dos cosas:

sort -o archivo -u archivo

Lo que hicimos fue sacar las lineas repetidas y guardar el resultado en el mismo archivo (ojo no hagan macanas).

Tambien otra forma facil es generar un archivo nuevo:

sort -u archivo > archivonuevo

Espero les haya gustado este capitulo que llamamos Conociendo el comando sort para usar en bash

Print Friendly, PDF & Email
Share:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *