2012-02-12 17 views
102

en script bash Quiero seleccionar N líneas aleatorias del archivo de entrada y salida a otro archivo. ¿cómo se puede hacer esto?Seleccionar líneas aleatorias de un archivo en bash

+0

Ordenar el archivo de forma aleatoria y de selección de N primeras líneas. –

+0

También vea http://stackoverflow.com/questions/12354659/how-to-select-random-lines-from-a-file. –

+8

esto no es un duplicado - quiere N líneas vs 1 línea. – OneSolitaryNoob

Respuesta

134

Ordenar el archivo de forma aleatoria y selección de primera 100 líneas:

$ sort -R input | head -n 100 >output 
+38

'sort' en realidad ordena líneas idénticas juntas, por lo que si puedes tener líneas duplicadas y tú tiene 'shuf' (una herramienta gnu) instalada, es mejor usarlo para esto. – Kevin

+18

Andalso, esto definitivamente te va a hacer esperar ** mucho si tienes un archivo bastante grande - 80kk lines -, mientras que 'shuf -n' actúa bastante instantáneamente. – Rubens

+26

ordenar -R no está disponible en Mac OS X (10.9) – tfb785

316

Uso shuf con la opción -n como se muestra a continuación, para obtener N líneas al azar:

shuf -n N input > output 
+26

Esta debería ser la respuesta aceptada. Wow, Shuf es muy rápido. - La selección de 10000 líneas aleatorias de un archivo de texto con 40000 líneas es instantánea.Tratar de usar 'sort -R' tomó tanto tiempo que simplemente CTRL-C es – carpii

+1

Si solo necesitas un conjunto aleatorio de líneas, no en orden aleatorio, entonces shuf es muy ineficiente (para archivos grandes): mejor es hacer un depósito muestreo, como en [esta respuesta] (https://stackoverflow.com/a/692401/933228). – petrelharp

+3

ni shuf ni sort -R están disponibles para mac OSX. ¿alguna sugerencia? –

Cuestiones relacionadas