Uso de sort: Herramientas UNIX (X)
Mediante el uso de sort podemos ordenar la salida de los comandos ya sea alfabéticamente como numéricamente. A continuación veremos unos ejemplos de uso del comando sort.
Vamos a suponer el siguiente fichero de ejemplo:
# cat /tmp/lusers rose 1234 redsell 2345 lilypink 3456 madmax 4567 nolives 5678 lilkington 6789 sutton 4444 bint 2222 afra 1111 cita 0000
Para ordenar alfabéticamente el fichero podemos usar el comando sort sin parámetros:
# cat /tmp/lusers | sort afra 1111 bint 2222 cita 0000 lilkington 6789 lilypink 3456 madmax 4567 nolives 5678 redsell 2345 rose 1234 sutton 4444
En el caso que queramos ordenar numéricamente un conjunto de valores lo podemos hacer indicando el parámetro -n:
# cat /tmp/lusers | awk '{ print $2}' | sort -n
0000
1111
1234
2222
2345
3456
4444
4567
5678
6789
En el caso que queramos indica una columna por la que ordenar podemos usar el parámetro -k. Por ejemplo, para ordenar numéricamente por la segunda columna usaríamos -nk 2:
# cat /tmp/lusers | sort -nk 2 cita 0000 afra 1111 rose 1234 bint 2222 redsell 2345 lilypink 3456 sutton 4444 madmax 4567 nolives 5678 lilkington 6789
Para ordenar por el orden inverso podemos usar la opción -r:
# cat /tmp/lusers | sort -nrk 2 lilkington 6789 nolives 5678 madmax 4567 sutton 4444 lilypink 3456 redsell 2345 bint 2222 rose 1234 afra 1111 cita 0000
En el caso que tengamos el fichero con un separador diferente a espacios podemos usar la opción -t para indicar el separador. Por ejemplo, suponiendo el siguiente fichero de entrada separado por comas (CSV):
rose,1234 redsell,2345 lilypink,3456 madmax,4567 nolives,5678 lilkington,6789 sutton,4444 bint,2222 afra,1111 cita,0000
Indicamos con -t la coma como separador:
# cat /tmp/lusers.csv | sort -t, -bk 2 cita,0000 afra,1111 rose,1234 bint,2222 redsell,2345 lilypink,3456 sutton,4444 madmax,4567 nolives,5678 lilkington,6789
Relacionados
Imprimir
15. March 2010 at 3:59 pm :
Muy útil la entrada, como siempre.
Yo añadiría la opción -u, que nos permite hacer lo mismo que si ponemos un pipe a uniq, es decir, ordena la salida y sólo muestra la primera ocurrencia de cada línea.
17. March 2010 at 10:26 am :
Realmente útil, si, sobretodo para el parsing de logs!
Muchas gracias por el comentario!
4. April 2010 at 10:31 am :
¿se podria ordenar de tal forma que las lineas que tienen un mismo valor en una de las dos columnas, no apareciera en la salida?¿cómo?Por ejemplo: tres columnas (dia, ciudad, grados de temperatura). Sacar por pantalla, para cada ciudad, la temperatura máxima.
27. July 2011 at 3:53 pm :
cseguram, te respondo después de más de 1 año. Eso se hace con awk.
cat archivo.txt | sort (modificadores) | awk (sacas la T° máxima)