GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Diviser un fichier en fonction d'un ensemble de lignes prédéfini ?

Je souhaite diviser un fichier texte en fonction d'un ensemble prédéfini de lignes.
Par exemple. J'ai un fichier

a
b
c
d
e
f

Et puis j'ai les ensembles de lignes suivants (ceux-ci pourraient être stockés mais c'est plus pratique, sur un seul fichier, plusieurs fichiers,…).

1,2
3,6
5,4

Je souhaite diviser mon fichier afin de récupérer 3 fichiers comme :

fichier1

a
b

fichier2

c
f

fichier3

e
d

Réponse acceptée :

Voici un bash script en supposant que votre fichier d'entrée est nommé infile et que les plages sont stockées 1 par ligne dans un fichier nommé splits :

i=1
for range in $(< splits); do
  sed -n "$(echo "$range" | cut -f1 -d, )p" infile > "file$i"
  sed -n "$(echo "$range" | cut -f2 -d, )p" infile >> "file$i"
  ((i++))
done

Cela utilise simplement sed pour imprimer les lignes spécifiées par les plages, et enregistre chaque résultat dans un nouveau fichier (les fichiers créés sont nommés fichier1 fichier2 fichier3 etc.). Deux invocations de sed sont utilisés pour préserver l'ordre spécifié des lignes.

Notez qu'il n'y a pas de vérification de format ou d'erreur effectuée par ce script simple, et les fichiers existants nommés par ex. fichier1 sera écrasé.

Une alternative simplifiée (avec l'aimable autorisation de @muru) utilisant while read et laisser bash diviser les plages au lieu de couper :

i=1
while IFS=',' read n1 n2 
do
    sed -n "$n1 p; $n2 p" infile > "file$i"
    ((i++))
done < splits

Si l'ordre des lignes dans les fichiers de sortie est important (par exemple les lignes 5,4 !=4,5), alors le sed bit devra être divisé en deux invocations distinctes similaires au premier script.


Ubuntu
  1. Afficher tout le fichier jusqu'au match ?

  2. Ubuntu - Diviser l'audio en plusieurs morceaux en fonction des horodatages d'un fichier texte avec Sox ou Ffmpeg ?

  3. Utilisation de Sed pour mettre à jour le fichier Grub ?

  4. Remplacer plusieurs textes de fichiers par Sed ?

  5. Configurer des hôtes virtuels sur CentOS

Comment activer et configurer le fichier .htaccess sur Apache

Remplacement de chaîne dans Bash

Comment configurer le partage NFS sur Ubuntu 20.04, 18.04

Comment diviser un seul fichier en plusieurs fichiers en fonction des lignes

Comment remplacer une chaîne dans un ou plusieurs fichiers ?

Comment diviser un fichier MP3 ?