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.