Au hasard de brassage des lignes dans Linux / Bash
J'ai quelques fichiers dans linux. Pour l'exemple 2, et j'ai besoin de brouiller les fichiers dans un fichier.
Par exemple
$cat file1
line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
et
$cat file2
linea one
linea two
linea three
linea four
linea five
linea six
linea seven
linea eight
Et, plus tard, que je brouiller les deux fichiers que je peux obtenir quelque chose comme:
linea eight
line 4
linea five
line 1
linea three
line 8
linea seven
line 5
linea two
linea one
line 2
linea four
line 7
linea six
line 1
line 6
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser
shuf
commande =)Ou avec Perl :
Tri: (lignes similaires seront mis ensemble)
Shuf:
Perl:
BASH:
Awk:
sort -R
pour cette tâche, sauf si vous êtes sûr que toutes les lignes sont distinctes (voir mon commentaire pour Kent réponse).shuf
donne de meilleurs résultats, suivie par laperl
solution; laawk
solution, bien que sensiblement plus lent, a l'avantage d'être conforme à POSIX.sort -R
, comme mentionné, n'est pas un vrai shuffle, et aussi assez lent avec de gros d'entrée. À l'aide d'unbash
boucle est la plus lente de loin, et ici aussi gêné que de produire un max. de 32 768 valeurs aléatoires. Voir ici pour plus de détail sur la comparaison des performances.Juste une remarque pour OS X, les utilisateurs qui utilisent MacPorts: le
shuf
commande est partie decoreutils
et est installé sous le nomgshuf
.brew install coreutils
Voici un one-liner qui ne repose pas sur
shuf
ousort -R
, que je n'avais pas sur mon mac:Ce passe en revue toutes les lignes dans
my_file
et tirés à part dans un ordre aléatoire.Vous n'avez pas besoin d'utiliser des tubes ici. Trier seul le fait avec le fichier(s) en tant que paramètres. Je voudrais juste faire
ou si vous avez plusieurs fichiers
Je voudrais utiliser
shuf
trop.une autre option, le système de tri a:
vous pourriez essayer:
sort -R
méthode: les lignes similaires seront mis ensemble (essayez avec, par exemple, deux fois le même fichier, vous serez surpris).Cela a fonctionné pour moi. Il emploie le shuffle de Fisher-Yates.
Il est clairement biaisé rand (comme la moitié du temps, la liste va commencer avec la première ligne), mais pour certains de base de la randomisation, avec juste bash les builtins je suppose que c'est beau? Il suffit d'imprimer chaque ligne de oui/non, puis imprimer le reste...