Euh, n'oublions pas
sort --random-sort
shuf
est le meilleur moyen.
sort -R
est douloureusement lent. J'ai juste essayé de trier un fichier de 5 Go. J'ai abandonné au bout de 2h30. Alors shuf
trié en une minute.
Et un one-liner Perl vous obtenez !
perl -MList::Util -e 'print List::Util::shuffle <>'
Il utilise un module, mais le module fait partie de la distribution du code Perl. Si cela ne suffit pas, vous pouvez envisager de lancer le vôtre.
J'ai essayé de l'utiliser avec le -i
flag ("edit-in-place") pour qu'il modifie le fichier. La documentation suggère que cela devrait fonctionner, mais ce n'est pas le cas. Il affiche toujours le fichier mélangé sur stdout, mais cette fois, il supprime l'original. Je vous suggère de ne pas l'utiliser.
Prenons un script shell :
#!/bin/sh
if [[ $# -eq 0 ]]
then
echo "Usage: $0 [file ...]"
exit 1
fi
for i in "[email protected]"
do
perl -MList::Util -e 'print List::Util::shuffle <>' $i > $i.new
if [[ `wc -c $i` -eq `wc -c $i.new` ]]
then
mv $i.new $i
else
echo "Error for file $i!"
fi
done
Non testé, mais j'espère qu'il fonctionne.