[Bash] : couper un fichier en plusieurs avec split

Print Friendly, PDF & Email

Fichier trop gros ou besoin de découper votre fichier en parts égales ou splitter toutes les X lignes, c’est possible. Split est un binaire que j’utilise peu mais qui peu s’avérer très efficace. Voyons un peu comment celui-ci fonctionne avec quelques exemples.

Créons tout d’abord un fichier de test :

└─ $ ▶ for i in {0..100000};do echo "ligne ${i}">>texte.txt; done

Avec ceci nous avons donc un fichier texte de 100 000 lignes.

Lançons un split sans option :

split texte.txt

Nous obtenons de nombreux fichiers de 1000 lignes chacun.

└─ $ ▶ wc -l x*
   1000 xaa
   1000 xab
   1000 xac

Remarquez que tous commence par un x.

Utilisons l’option -l pour définir le nombre de ligne par fichier :

└─ $ ▶ split -l50000 texte.txt 


└─ $ ▶ wc -l x*
50000 xaa
50000 xab

De la me manière nous aurions pu découper par taille de fichier en bytes avec l’option -b.

La nomenclature imposé dans le nommage du fichier est pas très fun mais on peut la retoucher en définissant un suffix numérique par exemple avec l’option -d. On a alors des fichiers nomé x01, x02…

Mais ce qui est le plus intéressant c’est de combiner l’utilisation d’un suffix et d’une numérotation numérique. Pour cela utilisons :

└─ $ ▶ split -d -l50000 texte.txt suffix-
└─ $ ▶ wc -l suffix*
50000 suffix-00
50000 suffix-01

Jusqu’ici je dirais que ce qui est embêtant c’est de se poser la questionde quel pas pour splitter les fichiers et combien vais-je en obtenir ? et bien au lieu de définir une taille ou un nombre de ligne, on peut définir le nombre de fichiers à la sortie avec l’option -n.

└─ $ ▶ split -d -n4 texte.txt suffix-
└─ $ ▶ wc -l suffix*
25694 suffix-00
24769 suffix-01
24769 suffix-02
24769 suffix-03

Comment fusionner tous les fichiers à l’arrivée si on a besoin du fichier d’origine ?

└─ $ ▶ md5sum texte.txt 
d4da8315d007541dfdcf61e2ea2fbecd texte.txt
└─ $ ▶ cat suffix-* | md5sum
d4da8315d007541dfdcf61e2ea2fbecd -

Un cat suffit et vous le voyez vous pouvez faire des vérifications sur le contenu avec le fameux md5sum.

Découvrez  [Bash] : lister et calculer les fréquences des erreurs apache depuis les logs... et un peu de SEO