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:
Post a Comment