101 votes

Mélange aléatoire des lignes dans Linux / Bash

J'ai quelques fichiers dans linux. Par exemple 2 et j'ai besoin de mélanger les fichiers dans un seul fichier.

Par exemple

$cat file1
line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8

et

$cat file2
ligne un
ligne deux
ligne trois
ligne quatre
ligne cinq
ligne six
ligne sept
ligne huit

Et plus tard lorsque je mélange les deux fichiers, je peux obtenir quelque chose comme:

ligne huit
ligne 4
ligne cinq
ligne 1
ligne trois
ligne 8
ligne sept
ligne 5
ligne deux
ligne un
ligne 2
ligne quatre
ligne 7
ligne six
ligne 1
ligne 6

166voto

sputnick Points 31663

Vous devriez utiliser la commande shuf =)

cat file1 file2 | shuf

Ou avec Perl :

cat file1 file2 | perl -MList::Util=shuffle -wne 'print shuffle <>;'

67voto

jm666 Points 17312

Trier: (les lignes similaires seront regroupées)

cat file1 file2 | sort -R

Shuf:

cat file1 file2 | shuf

Perl:

cat file1 file2 | perl -MList::Util=shuffle -e 'print shuffle'

BASH:

cat file1 file2 | while IFS= read -r line
do
    printf "%06d %s\n" $RANDOM "$line"
done | sort -n | cut -c8-

Awk:

cat file1 file2 | awk 'BEGIN{srand()}{printf "%06d %s\n", rand()*1000000, $0;}' | sort -n | cut -c8-

25voto

Messa Points 5988

Juste une note aux utilisateurs d'OS X qui utilisent MacPorts : la commande shuf fait partie de coreutils et est installée sous le nom gshuf.

$ sudo port install coreutils
$ gshuf example.txt # ou cat example.txt | gshuf

19voto

davvs Points 614

Vous n'avez pas besoin d'utiliser des tuyaux ici. La commande sort le fait seul avec le(s) fichier(s) en tant que paramètres. Je ferais simplement

sort -R file1

ou si vous avez plusieurs fichiers

sort -R file1 file2

13voto

Tyler Points 16516

Voici une seule ligne qui ne dépend pas de shuf ou de sort -R, que je n'avais pas sur mon mac:

while read line; do echo $RANDOM $line; done < my_file | sort -n | cut -f2- -d' '

Cela itère sur toutes les lignes de my_file et les réimprime dans un ordre aléatoire.

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