Couper un fichier en plusieur (shell)
marinaetsonchat
Messages postés
1
Statut
Membre
-
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité -
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité -
Bonjour,
Je souhaite couper un fichier en plusieurs autres.
Mon fichier principal est de le forme :
*/titre
paragraphe
*/titre
paragraphe
...
Je voudrais mettre le contenu de chaque paragraphe dans un fichier de meme nom que le titre. Les lignes contenant le titre commencent par */ et sont donc facilement récupérables.
Tout cela avec un script shell, comment faire ?
Je souhaite couper un fichier en plusieurs autres.
Mon fichier principal est de le forme :
*/titre
paragraphe
*/titre
paragraphe
...
Je voudrais mettre le contenu de chaque paragraphe dans un fichier de meme nom que le titre. Les lignes contenant le titre commencent par */ et sont donc facilement récupérables.
Tout cela avec un script shell, comment faire ?
A voir également:
- Couper un fichier en plusieur (shell)
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Classic shell - Télécharger - Personnalisation
3 réponses
Ca se fait facilement en python, en perl, ou en C++ avec la lib pcre. Je pense que c'est faisable en shell mais c'est plus chiant. L'idée c'est de lire ton fichier ligne par ligne, et dès que tu détectes avec une expression régulière un titre, tu stockes tout ce que tu lis dans un nouveau fichier jusqu'à tomber sur un nouveau titre.
Il faudrait nous dire ce que tu fais du texte situé avant le premier titre.
Dans ton cas l'expression régulière serait du genre :
et contiendra deux éléments (le numéro du titre et le titre lui même).
Bonne chance
Il faudrait nous dire ce que tu fais du texte situé avant le premier titre.
Dans ton cas l'expression régulière serait du genre :
"^\s*(\d*)/\s*(\.*)\s*$"
et contiendra deux éléments (le numéro du titre et le titre lui même).
Bonne chance
Je n'ai pas trouve la solution en shell, d'ailleurs je n'ai pas cherche car je crois avoir trouve une solution assez simple en langage Awk.
Il faut executer la commande:
awk -f moulinette.awk texteaanalyser.txt
Et voici le contenu du fichier moulinette.awk:
#!/bin/awk
BEGIN {titre = "";}
$0 !~ /^*\// && "" != titre {print > titre".txt";}
/^*\// {sub(/^*\//,""); titre = $0;}
# fin
Est ce que le langage shell doit obligatoire etre utilise ?
Il faut executer la commande:
awk -f moulinette.awk texteaanalyser.txt
Et voici le contenu du fichier moulinette.awk:
#!/bin/awk
BEGIN {titre = "";}
$0 !~ /^*\// && "" != titre {print > titre".txt";}
/^*\// {sub(/^*\//,""); titre = $0;}
# fin
Est ce que le langage shell doit obligatoire etre utilise ?
Salut,
c'est difficile de faire des choses de ce genre en shell pur (je n'ose même pas de penser)
souvent se sont des utilitaires (langages) comme sed et awk qui font l'affaire - mais ça ne sera pas de shell mais de sed ou de awk
perso je pourrai proposer une soluce en Perl, mais comme la demande c'était pour shell...
l'extraction par paragraphe ce n'est pas difficile en Perl
de façon générale
En sachant qu'on peut récuperer dans une variable le nom de titre et ensuite créer le fichier etc..
c'est difficile de faire des choses de ce genre en shell pur (je n'ose même pas de penser)
souvent se sont des utilitaires (langages) comme sed et awk qui font l'affaire - mais ça ne sera pas de shell mais de sed ou de awk
perso je pourrai proposer une soluce en Perl, mais comme la demande c'était pour shell...
l'extraction par paragraphe ce n'est pas difficile en Perl
de façon générale
print $paragraphe if /DEBUT/.../FIN/
En sachant qu'on peut récuperer dans une variable le nom de titre et ensuite créer le fichier etc..