Découper un fichier.txt en plusieurs partie [Résolu]

Signaler
Messages postés
258
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
3 juillet 2020
-
Messages postés
213
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
27 septembre 2019
-
Bonjour,
je retrouve le shell après bien des années d'absence et je suis confonté à un problème.
Voilà je dispose du fichier.txt suivant:

#?COMMENCEMENT
s_prenom='ALBERT'
s_nom='DUPOND'
s_sexe='masculin'
s_aptitude=''
s_definition='Habitant de France'
s_groupe='HOMME'
s_pseudo=''
s_langue=''
s_etranger='N'
s_address='11.rue.Temple/7700'
s_unformation=''
s-profession='sans'
#?FIN
#?COMMENCEMENT
s_prenom='FRED'
s_nom='BACHELARD'
s_sexe='masculin'
s_aptitude=''
s_definition='Habitant de France'
s_groupe='HOMME'
s_pseudo=''
s_langue=''
s_etranger='N'
s_address='25.rue.Baltot/78114'
s_unformation=''
s-profession='sans'
#?FIN
etc...


Comme vous pouvez le constater, ce fichier est constitué des balises suivantes:
#?COMMENCEMENT
#?FIN


Mon but est de découpé le fichier autant de fois qu'il y a de balises afin d'obtenir plusieurs fichier.nn.txt (nn = numéro de fichier) avec le contenu suivant:
#?COMMENCEMENT 
s_prenom='ALBERT'
s_nom='DUPOND'
s_sexe='masculin'
s_aptitude=''
s_definition='Habitant de France'
s_groupe='HOMME'
s_pseudo=''
s_langue=''
s_etranger='N'
s_address='11.rue.Temple/7700'
s_unformation=''
s-profession='sans'
#?FIN


J'ai essayé plein de choses avec awk, mais je n'obtiens pas de résultat satisfaisant...
Pourriez-vous svp m'apporter votre aide ?
Merci à vous ! :-)
Ka-El

1 réponse

Messages postés
18151
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
6 juillet 2020
4 889
hello
awk -v n=1 '{print > "fichier." sprintf("%02d", n)  ".txt"} /#?FIN/ {n++}' fichier.txt
Messages postés
258
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
3 juillet 2020

Salut Dubcek,
Superbe ! :-)
Je suis à chaque fois épaté....
En tout cas, merci beaucoup pour ton aide ;-)
Ka-El
Messages postés
213
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
27 septembre 2019
14
awk ' /#?COMMENCEMENT/{++n}{print > "fichier." sprintf("%02d", n) ".txt"}' fichier.txt

oui, oui, c'est du plagiat.
XD
Messages postés
258
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
3 juillet 2020

Merci lEprofSonDkon :-)
D'ailleurs comme je vois que vous êtes en forme, vous sauriez faire la même chose, mais cette fois-ci en batch ? :-)
Messages postés
213
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
27 septembre 2019
14 >
Messages postés
258
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
3 juillet 2020

en batch, sur W$ ? non.

en bash, ce n'est pas compliqué (l'algo est le même) :
une boucle
while
pour lire le fichier ligne par ligne
un simple test pour évaluer si la ligne correspond à l'expression recherchée pour alors incrémenter la variable numérique
et une redirection de la ligne lue dans le fichier souhaité

rien de compliqué.