11
votes

Choisir une ligne aléatoire de stdout

J'ai une commande qui réalise un certain nombre de lignes à stdout: xxx

Comment extraire une entrée aléatoire à partir de ceci, dans une doublure (de préférence sans awk) pour que je puisse Il suffit d'utiliser dans un tuyau: xxx

merci!


0 commentaires

6 Réponses :


19
votes
listall | shuf | head -n 1

2 commentaires

Excellent, exactement ce dont j'avais besoin (je ne savais pas à propos de Shuf) - merci!


effectivement "listall | shuf -n 1" semble assez



2
votes

Utilisation de Perl:

  • perl -mlist :: util = shuffle -e'print ((shuffle <>) [0]) '

  • perl -e'print $ listall [$ clé = int rand (@listall = <>)] '


1 commentaires

Merci. Bien que plus complexe que d'utiliser SHUF, cela pourrait être utile de temps utile.



2
votes

Ceci est la mémoire en sécurité, contrairement à l'utilisation de Shuf ou de liste :: Util shuffle:

listAll | awk 'begin {srand ()} int (rand () * nr) == 0 {x = $ 0} fin {imprimé x}'

Cela importerait que si ListaLall pouvait renvoyer un résultat énorme.

Pour plus d'informations, voir l'entrée DADS sur échantillonnage du réservoir .


1 commentaires

Bon à savoir, merci! Ce n'est pas une préoccupation pour ce cas particulier, mais je n'avais même pas pensé à cette question avant ...



3
votes

Vous pouvez le faire avec juste bash, sans autres outils autres que "LISTALL"

$ lists=($(listall)) # put to array
$ num=${#lists[@]} # get number of items
$ rand=$((RANDOM%$num)) # generate random number
$ echo ${lists[$rand]}


0 commentaires

0
votes

Enregistrer les éléments suivants en tant que script (aléatoireLLine.sh): xxx

et exécutez-le comme xxx


0 commentaires

4
votes

Certains se sont plaints de ne pas avoir shuf disponible sur leurs installations, alors peut-être que cela est plus accessible: listAll | Trier -r | tête -n 1 . -r est "trier au hasard".


1 commentaires

J'ai peur que -r n'est pas disponible sur OS X.