Siguiendo con la pregunta this, necesito obtener exactamente n
líneas al azar de un archivo (o stdin
). Esto sería similar a head
o tail
, excepto que quiero algunos desde el medio.¿Cómo puedo obtener exactamente n líneas aleatorias de un archivo con Perl?
Ahora, además de recorrer el archivo con las soluciones a la pregunta vinculada, ¿cuál es la mejor manera de obtener exactamente las líneas n
en una sola ejecución?
Como referencia, he intentado esto:
#!/usr/bin/perl -w
use strict;
my $ratio = shift;
print $ratio, "\n";
while() {
print if ((int rand $ratio) == 1);
}
donde $ratio
es el porcentaje aproximado de líneas quiero. Por ejemplo, si quiero 1 de cada 10 líneas:
random_select 10 a.list
Sin embargo, esto no me da una cantidad exacta:
aaa> foreach i (0 1 2 3 4 5 6 7 8 9)
foreach? random_select 10 a.list | wc -l
foreach? end
4739
4865
4739
4889
4934
4809
4712
4842
4814
4817
El otro pensamiento que tuve fue sorbiendo el archivo de entrada y luego elegir n
al azar de la matriz, pero eso es un problema si tengo un archivo realmente grande.
¿Alguna idea?
Editar: Esto es un duplicado exacto de la pregunta this.
No es éste un duplicado exacto de http://stackoverflow.com/questions/692312/randomly-pick-lines-from-a-file-without-slurping-it-with-unix –
sí, es. Lo siento. Voy a vincular los dos y votar para cerrarlo. –
no, la otra pregunta permitía que la muestra estuviera desactivada, esta quiere un número exacto. – Alnitak