Couper un fichier en plusieur (shell)

marinaetsonchat Messages postés 1 Statut Membre -  
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 ?
A voir également:

3 réponses

mamiemando Messages postés 34229 Date d'inscription   Statut Modérateur Dernière intervention   7 897
 
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 :
"^\s*(\d*)/\s*(\.*)\s*$"

et contiendra deux éléments (le numéro du titre et le titre lui même).

Bonne chance
0
_vince Messages postés 37 Statut Membre
 
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 ?
0
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570
 
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
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..
0