Menu

Traitement de texte ksh [Résolu]

dino - 15 sept. 2017 à 08:15 - Dernière réponse :  dino
- 18 sept. 2017 à 15:27
Bonjour tout le monde ,

je doit extraire a chaque fois la ligne "Debut" et lui associer la ligne "Fin" qui vient juste apres ,et je passe au suivant "Debut" et le "Fin" qui vient juste apres
ainsi de suite justqu'a la fin ...
J'ai essayer :
for i in `grep "Debut" FICHIER.txt ` ;do
grep "Fin" FICHIER.txt >resultat1
done

mais ca me renvoie tout les "Fin" ...


Si qlq a une idée ...
Merci beaucoup

Unix AIX 7.1



Afficher la suite 

Votre réponse

14 réponses

UnGnU 820 Messages postés lundi 2 mai 2016Date d'inscription 22 mai 2018 Dernière intervention - 15 sept. 2017 à 09:04
0
Utile
Salut,

grep -A 1 'DEBUT'  FICHIER.txt
devrait le faire, non ?

Commenter la réponse de UnGnU
0
Utile
Merci pour la reponse , mais ca ne passe pas :
grep: Not a recognized flag: A

voici le fichier :
Debut XXXXXXX XXXXX XXXXXXXX
XXXXXXX XXXXX XXXXXXXX
XXXXXXX XXXXX XXXXXXXX
XXXXXXX XXXXX XXXXXXXX
XXXXXXX XXXXX XXXXXXXX
XXXXXXX XXXXX XXXXXXXX
Fin XXXXXXX XXXXX XXXXXXXX
Debut XXXXXXX XXXXX XXXXXXXX
XXXXXXX XXXXX XXXXXXXX
XXXXXXX XXXXX XXXXXXXX
XXXXXXX XXXXX XXXXXXXX
XXXXXXX XXXXX XXXXXXXX
Fin XXXXXXX XXXXX XXXXXXXX
.
.
.


Ce qui minteresse c'est d'extraire a chaque fois les partie "Debut" a "Fin"
UnGnU 820 Messages postés lundi 2 mai 2016Date d'inscription 22 mai 2018 Dernière intervention - 15 sept. 2017 à 11:11
Ce n'est pas grep qu'il te faut utiliser, mais awk puisque tu dois aussi, si j'ai bien compris, récupérer chaque partie dans un fichier différent.
Commenter la réponse de dino
0
Utile
c'est ligne par ligne qu m'interesse ...

de n ligne a n ligne...
Commenter la réponse de dino
dubcek 17419 Messages postés lundi 15 janvier 2007Date d'inscriptionContributeurStatut 22 mai 2018 Dernière intervention - Modifié par dubcek le 15/09/2017 à 12:16
0
Utile
hello
comme ça ?
$ awk '/Debut/ {n=1} /Fin/ {n=0; print} n' fichier

ou comme ca ?
$ awk '/Debut/ {print} /Fin/ {print}' fichier 
Commenter la réponse de dubcek
0
Utile
non , ca me le decoupe pas :-(
cat fichier
DEBUT
1
2
3
FIN
DEBUT
4
6
9
FIN
DEBUT
4
8
0
FIN


resultat de la commande
awk '/DEBUT/ {n=1} /FIN/ {n=0; print} n' fichier

DEBUT
1
2
3
FIN
DEBUT
4
6
9
FIN
DEBUT
4
8
0
FIN
dubcek 17419 Messages postés lundi 15 janvier 2007Date d'inscriptionContributeurStatut 22 mai 2018 Dernière intervention - 15 sept. 2017 à 12:18
le post #1 ne parle pas de découpe,quel est le résultat attendu ?
Commenter la réponse de dino
0
Utile
le resultat attendu est n fichier ,autant qu'il y'a de "DEBUT/FIN3
cat fich1
DEBUT
1
2
3
FIN

cat fich2
DEBUT
4
6
9
FIN

cat fich3
DEBUT
4
8
0
FIN


et on peut aller comme ca jusqu'a n fichier
Commenter la réponse de dino
0
Utile
desolé erreur de frappe
""DEBUT/FIN"
Commenter la réponse de dino
dubcek 17419 Messages postés lundi 15 janvier 2007Date d'inscriptionContributeurStatut 22 mai 2018 Dernière intervention - Modifié par dubcek le 15/09/2017 à 12:44
0
Utile
essayer
$ awk '/DEBUT/ {n=1; f++} n {print > "fich" f} /FIN/ {n=0}' fichier
Commenter la réponse de dubcek
0
Utile
DUBCEK t'es le KING !!!!!!
ca fonctionne !!!!!

MERCI !!!!
Commenter la réponse de dino
0
Utile
Bonjour ,

euh est ce que je peux abuser de ta gentillesse :-( ???

dans ta commande :
$ awk '/DEBUT/ {n=1; f++} n {print > "fich" f} /FIN/ {n=0}' fichier

est ce qu'on peut variabliser "fich" pour le forcer a prendre le nom qu'on veut ?
Commenter la réponse de dino
dubcek 17419 Messages postés lundi 15 janvier 2007Date d'inscriptionContributeurStatut 22 mai 2018 Dernière intervention - Modifié par dubcek le 18/09/2017 à 13:14
0
Utile
$ NOM="fich"; awk -v nom="$NOM" '/DEBUT/ {n=1; f++} n {print > nom f} /FIN/ {n=0}' fichier
Commenter la réponse de dubcek
0
Utile
super !!! ca fct ...

merci merci merci beaucoup Dubcek !!!!!
Commenter la réponse de dino