Sunday, January 14, 2007

unsort

unsort

Acá tengo una serie de comandos encadenados que sirven para desordenar un archivo 

rafael@edubuntu:~$ awk '{printf("%7d\t%s\n", int(rand()*1000000), $0)}' ../columna10.txt | sort -n | cut -f2 

vamos por partes 

a) El archivo que tiene los datos a desordenar es ../columna10.txt 

b) awk '{printf("%7d\t%s\n", int(rand()*1000000), $0)}' ../columna10.txt 

 

Uso awk para generar un número al azar entre 0 y 999999, imprimo ese número junto a cada línea del archivo y uso como separador de campos el ascii 9 (tab) 

c) sort -n Ordeno la salida de awk, el flag -n indica que la clave a usar es numérica. 

d) cut -f2 Selecciono el segundo campo, en el punto b) agregué un campo para ordenar, cut usado de esta manera asume que el separador de campos es el tab. listo!, con esto tengo en la salida estándar el archivo desordenado. 

para comprobar como se comporta hice una pruebita con un archivo de 226800 líneas 

rafael@edubuntu:~$ wc -l ../columna10.txt  

226800 ../columna10.txt

rafael@edubuntu:~$ time awk '{printf("%7d\t%s\n", int(rand()*1000000), $0)}' ../columna10.txt | sort -n | cut -f2 

... ... 

real 0m4.501s 

user 0m1.644s sys 0m0.484s 

nada mal, cierto?

No comments: