GNU/Linux >> Tutoriels Linux >  >> Linux

Comment supprimer plusieurs lignes aléatoires d'un fichier texte à l'aide de Sed ?

Je souhaite supprimer 10 lignes aléatoires d'un fichier texte de 90 lignes, puis le sortir dans un nouveau fichier. J'ai essayé de le faire en utilisant sed, mais j'ai deux problèmes. J'utilise :

sed -i $((1 + RANDOM & 90))d input.txt > output.txt

puis en exécutant la commande 10 fois (je suppose qu'il existe une meilleure façon de procéder !)

Le premier problème que j'ai est que j'obtiens l'erreur :

sed :-e expression #1, char 2 :utilisation incorrecte de l'adresse de ligne 0

Je suppose que cela a quelque chose à voir avec le fait qu'il a peut-être déjà supprimé la ligne 1 et qu'il essaie à nouveau.

Le deuxième problème est que parfois rien n'est écrit dans le fichier de sortie, même si cela fonctionnait avant d'utiliser la même commande.

Réponse acceptée :

Vous vouliez probablement utiliser RANDOM % 90 plutôt que & . C'est de là que viennent les zéros (supprimer la ligne 1 est OK, à la prochaine exécution, les lignes seront numérotées 1 .. 89).

Il y a cependant un problème :la formule peut générer plusieurs fois le même nombre. Pour éviter cela, utilisez une approche différente :mélangez les nombres et choisissez les dix premiers :

shuf -i1-90 -n10 | sed 's/$/d/' | sed -f- input > output

Si vous n'aimez pas sed générer un sed script, vous pouvez utiliser printf , aussi :

sed -f <( printf %dd;  $(shuf -i1-90 -n10) ) input > output

Linux
  1. Comment supprimer les premières/dernières lignes 'n' de la sortie de la commande dans Shell ?

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

  3. Comment supprimer toutes les lignes d'un fichier dans Vim

  4. Supprimer les occurrences de chaîne dans le fichier texte

  5. Supprimer les lignes vides à l'aide de sed

Comment supprimer des lignes d'un fichier à l'aide de la commande Sed

Comment supprimer des lignes vides dans des fichiers à l'aide de Grep, Sed et Awk

Comment supprimer plusieurs lignes dans Vim

Tutoriel Unix Sed :Supprimer des lignes de fichier à l'aide d'adresses et de modèles

Tutoriel Unix Sed :comment écrire dans un fichier à l'aide de Sed

Comment supprimer le texte sélectionné dans l'éditeur vi