80 votes

Quel est le moyen le plus simple de lire une ligne aléatoire d'un fichier en ligne de commande Unix ?

Quel est le moyen le plus simple de lire une ligne aléatoire d'un fichier en ligne de commande Unix ?

114voto

Il existe un utilitaire appelé rl . Dans Debian, c'est dans le dossier randomize-lines qui fait exactement ce que vous voulez.

Ou vous pouvez utiliser shuf :

shuf -n 1 $FILE

27voto

PolyThinker Points 3473

Une autre alternative :

head -$((${RANDOM} % `wc -l < file` + 1)) file | tail -1

25voto

cat $FILE | sort --random-sort | head -n 1

(J'aime encore mieux l'approche shuf ci-dessus - je ne savais même pas que cela existait et je n'aurais jamais trouvé cet outil par moi-même).

7voto

Paolo Tedesco Points 22442

En utilisant un script bash :

#!/bin/bash
# replace with file to read
FILE=tmp.txt
# count number of lines
NUM=$(wc - l < ${FILE})
# generate random number in range 0-NUM
let X=${RANDOM} % ${NUM} + 1
# extract X-th line
sed -n ${X}p ${FILE}

3voto

Tracker1 Points 6573

Cat + perl < http://snippets.openminds.be/posts/show/8 >

edit : perl -e 'srand ; rand($.) < 1 && ($line = $_) while <> ; print $line;' nom de fichier

Merci M. Muskrat

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X