GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je randomiser les lignes d'un fichier à l'aide d'outils standard sur Red Hat Linux ?

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.


Linux
  1. Comment supprimer les N premières lignes d'un fichier Ascii à l'aide des commandes Shell ?

  2. en utilisant Linux, comment puis-je passer le contenu d'un fichier en tant que paramètre à un exécutable ?

  3. Comment puis-je compter le nombre de dossiers dans un lecteur sous Linux ?

  4. Comment puis-je éditer tous les fichiers renvoyés par find in vi sous Linux ?

  5. Linux + comment ne donner qu'à un utilisateur spécifique pour lire le fichier

Comment utiliser la commande touch sous Linux

Comment utiliser la commande Linux head

Comment utiliser la commande Linux diff

Comment effacer en toute sécurité un disque et un fichier à l'aide de la commande Linux shred

Comment mélanger les lignes dans un fichier sous Linux

Comment inverser les lignes d'un fichier par caractère sous Linux