Suite à la question this, j'ai besoin d'obtenir exactement n
lignes au hasard sur un fichier (ou stdin
). Ce serait similaire à head
ou tail
, sauf que j'en veux du milieu.Comment puis-je obtenir exactement n lignes aléatoires à partir d'un fichier avec Perl?
Maintenant, en dehors de la boucle sur le fichier avec les solutions à la question liée, quel est le meilleur moyen d'obtenir exactement n
lignes en une seule fois?
Pour référence, j'ai essayé ceci:
#!/usr/bin/perl -w
use strict;
my $ratio = shift;
print $ratio, "\n";
while() {
print if ((int rand $ratio) == 1);
}
où $ratio
est le pourcentage approximatif de lignes que je veux. Par exemple, si je veux 1 à 10 lignes:
random_select 10 a.list
Cependant, cela ne me donne pas un montant exact:
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
L'autre pensée que j'avais été siphonage le fichier d'entrée, puis en choisissant n
au hasard dans le tableau, mais c'est un problème si j'ai un très gros fichier.
Des idées?
Modifier: Ceci est une copie exacte de la question this.
est-ce pas une copie exacte de http://stackoverflow.com/questions/692312/randomly-pick-lines-from-a-file-without-slurping-it-with-unix –
oui il est. Pardon. Je vais lier les deux et voter pour le fermer. –
non, l'autre question permet à l'échantillon d'être éteint - celui-ci veut un nombre exact. – Alnitak