Lorsque vous travaillez sur la ligne de commande sous Linux, vous pouvez vous retrouver dans des situations où vous devez diviser un fichier en plusieurs parties. Si vous cherchez déjà un moyen de le faire, ou si vous voulez simplement savoir comment cela peut être fait, vous serez heureux de savoir qu'il existe un outil - appelé csplit - qui est construit à cet effet.
Dans ce didacticiel, nous discuterons des bases de cet outil et apprendrons comment il peut être utilisé. Mais avant cela, il convient de mentionner que toutes les commandes/instructions mentionnées ici ont été testées sur Ubuntu 16.04LTS.
Commande Linux Csplit
Voici comment la page de manuel de la commande la définit :
csplit - split a file into sections determined by context lines
Voici sa syntaxe générique :
csplit [OPTION]... FILE PATTERN...
Les petits fichiers individuels créés par csplit portent des noms tels que xx00 et xx01. La définition suivante - extraite de la page de manuel de la commande - devrait clarifier les choses :
Output pieces of FILE separated by PATTERN(s) to files 'xx00', 'xx01', ..., and output byte
counts of each piece to standard output.
Les exemples de type Q&A suivants devraient vous donner une bonne idée du fonctionnement de la commande csplit.
Q1. Comment diviser les fichiers en fonction du nombre de lignes ?
Supposons que votre fichier contienne 6 lignes et que l'exigence soit de diviser ce fichier à la troisième ligne, cela peut être fait en passant '3' comme argument de ligne de commande après la commande et le nom du fichier.
Par exemple, dans notre cas, file1 contenait les lignes suivantes :
1 Asia
2 Africa
3 Europe
4 North America
5 South America
6 Australia
Et voici la commande que nous avons exécutée :
csplit file1 3
Les nombres produits dans la sortie sont le nombre d'octets pour les fichiers produits par la commande. Inutile de dire que deux fichiers ont été produits dans la sortie, à savoir xx00 et xx01.
Le contenu de ces fichiers confirme que la scission s'est produite à la ligne numéro 3.
Q2. Comment diviser des fichiers à l'aide d'expressions régulières ?
Vous pouvez également utiliser des expressions régulières avec la commande csplit. Par exemple, dans le cas précédent, si vous souhaitez que l'outil répète le motif une fois de plus, vous pouvez le faire à l'aide de la commande suivante :
csplit file1 3 {1}
Donc dans ce cas, trois fichiers de sortie ont été produits :
Q3. Comment avoir un préfixe personnalisé au lieu du 'xx' par défaut ?
Par défaut, les fichiers que csplit produit en sortie ont 'xx' comme préfixe. Cependant, si vous le souhaitez, vous pouvez modifier le préfixe en utilisant le -f option de ligne de commande, qui nécessite le nouveau préfixe comme entrée.
Par exemple, la commande suivante produira des fichiers ayant 'htf' comme préfixe.
csplit file1 1 -f htf
Q4. Comment forcer csplit à ne pas supprimer les fichiers de sortie en cas d'erreur ?
La commande csplit, par défaut, supprime les fichiers de sortie (tous, s'ils sont créés) dès qu'elle rencontre une situation d'erreur. Par exemple, la capture d'écran suivante confirme qu'aucun fichier de sortie n'a finalement été produit :
Cependant, si vous le souhaitez, vous pouvez modifier ce comportement en utilisant le -k option dans la commande. Par exemple, la même commande a été exécutée à nouveau, mais avec cette option, et les fichiers de sortie n'ont pas été supprimés cette fois.
Q5. Comment supprimer les lignes qui correspondent au modèle d'entrée ?
La commande csplit fournit également une option pour supprimer les lignes qui correspondent au modèle d'entrée. L'option en question est --suppress-matched .
Par exemple, la commande suivante divise le fichier (fichier1) à la ligne 2 (xx00 contiendra la ligne 1, tandis que xx11 contiendra le reste des lignes).
csplit file1 2
Mais si vous souhaitez supprimer la ligne 2, vous pouvez exécuter la commande suivante :
csplit --suppress-matched file1 2
Q6. Comment utiliser un nombre de chiffres personnalisé au lieu du 2 par défaut ?
Tout comme le préfixe lui-même, le nombre de chiffres qui suivent le préfixe dans les noms de fichiers de sortie est également personnalisable. Supposons donc que vous vouliez avoir des noms comme xx000 et xx0001, vous pouvez le faire en utilisant le -n option de ligne de commande, qui nécessite un nombre d'entrée signifiant le nouveau nombre de chiffres.
Par exemple :
csplit -n 1 file1 2
La commande susmentionnée produirait des noms de fichiers tels que xx0, xx1, etc.
Conclusion
Un utilisateur moyen de la ligne de commande Linux n'a peut-être pas besoin de csplit quotidiennement, mais c'est certainement un utilitaire important que vous devriez au moins connaître. Nous avons couvert la plupart des exemples de base et des options de ligne de commande ici. Essayez-les, puis rendez-vous sur la page de manuel de l'outil pour en savoir plus.