Extraction de texte d'un fichier txt

[Résolu/Fermé]
Signaler
-
 Nilz -
Bonjour,
je suis un petit nouveau sur ce forum et en programmation, je viens requérir votre aide car je suis dans une impasse :
Mon problème est le suivant :
Je récupère un liste de mail (entête, corp ...) dans un fichier texte, après un premier filtre grep j'arrive à élaguer le contenu de ce fichier ainsi qu'à insérer des "balises" afin de repérer le texte à garder.
je me retrouve donc aven un texte de la forme :

textextextextetextextextexteDEBUT1adresse_mailFIN1
textextextextetextextextexteDEBUT2x erreursFIN2
textextextextetextextextexteDEBUT1adresse_mailFIN1
textextextextetextextextexteDEBUT2x erreursFIN2
textextextextetextextextexteDEBUT1adresse_mailFIN1
textextextextetextextextexteDEBUT2x erreursFIN2
textextextextetextextextexteDEBUT1adresse_mailFIN1
textextextextetextextextexteDEBUT2x erreursFIN2

Le but est dans un premier temps de garder uniquement ce qu'il se trouve entre DEBUT1 FIN1 puis entre DEBUT2 FIN2

Ensuite une fois le tri fait, entre DEBUT2 et FIN2 il se trouve l'expression x erreurs (où x est un nombre), j'aimerai pour finir extraire les ligne + mails associés contenant où erreur différent de 0

Je penser utiliser awk mais je n'y suis pas arriver si quelqu'un voit une solution ça serai cool !

Merci par avance
Nilz

5 réponses

re,
alors pour être précis avant j'ai

textextextextetextextextexteDEBUT1adresse_mailFIN1textextextextetextextextexte
textextextextetextextextexteDEBUT2x erreursFIN2textextextextetextextextexte
textextextextetextextextexteDEBUT1adresse_mailFIN1textextextextetextextextexte
textextextextetextextextexteDEBUT2x erreursFIN2textextextextetextextextexte
textextextextetextextextexteDEBUT1adresse_mailFIN1textextextextetextextextexte
textextextextetextextextexteDEBUT2x erreursFIN2textextextextetextextextexte
textextextextetextextextexteDEBUT1adresse_mailFIN1textextextextetextextextexte
textextextextetextextextexteDEBUT2x erreursFIN2 textextextextetextextextexte

ensuite j'aimerai avoir

adresse mail x erreurs
adresse mail x erreurs
adresse mail x erreurs
adresse mail x erreurs

et enfin extraire que les lignes où x différents de 0

Merci
Re,
Merci beaucoup pour ton aide, je me suis aperçu que dans mon fichier il restait quelques caractère qui posaient problèmes, après suppression tout est OK

merci pour ton aide
++
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 881
Salut,

Donne un exemple plus précis de ce que tu veux exactement, genre avant => après, parce que là c'est un peu... brouillon ;-))
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 881
Ok...
jp@MDK:~/tmpfs ssh$ cat fich
textextextextetextextextexteDEBUT1adresse_mail_totoFIN1textextext­extetextextextexte
textextextextetextextextexteDEBUT25 erreursFIN2textextext­extetextextextexte
textextextextetextextextexteDEBUT1adresse_mailtitiFIN1textextext­extetextextextexte
textextextextetextextextexteDEBUT22 erreursFIN2textextext­extetextextextexte
textextextextetextextextexteDEBUT1adresse_mailtataFIN1textextext­extetextextextexte
textextextextetextextextexteDEBUT20 erreursFIN2textextext­extetextextextexte
textextextextetextextextexteDEBUT1adresse_mailtutuFIN1textextext­extetextextextexte
textextextextetextextextexteDEBUT23 erreursFIN2textextext­extetextextextexte

jp@MDK:~/tmpfs ssh$ sed '/^$/d;N;s/.*DEBUT1\(.*\)FIN1.*DEBUT2\(.*\)FIN2.*/\1\n\2/' fich > new_fich

jp@MDK:~/tmpfs ssh$ cat new_fich
adresse_mail_toto
5 erreurs
adresse_mailtiti
2 erreurs
adresse_mailtata
0 erreurs
adresse_mailtutu
3 erreurs

jp@MDK:~/tmpfs ssh$ sed -n 'h;N;/.*\n0/! s/\n/ /p' new_fich
adresse_mail_toto 5 erreurs
adresse_mailtiti 2 erreurs
adresse_mailtutu 3 erreurs
jp@MDK:~/tmpfs ssh$
;-))
Grrr ça à l'ai sympa ton code mais chez moi ça marche pas :(
alors pour être précis voici un extrait de mon fichier :

Return-Path: DEBUT1toto1@wanadoo.frFIN1
[08/10/2008 22:03:40 : Fin de copie : D:\Commun,D:\Prog, D:\Utils, D:\Test versZ:\Mercredi\. 715 fichiers DEBUT20 erreursFIN2 2630 fichiers traités. Durée de la sauvegarde : 4 minutes et 39 secondes]
Return-Path: DEBUT1toto2@wanadoo.frFIN1
[08/10/2008 22:05:51 : Fin de copie : D:\appli\, D:\Bulte. versZ:\Mercredi\. 340 fichiers DEBUT20 erreursFIN2 1379 fichiers traités. Durée de la sauvegarde : 2 minutes et 1 secondes]
Return-Path: DEBUT1toto3@wanadoo.frFIN1
[08/10/2008 23:10:41 : Fin de copie : D:\Commun, D:\appli. versZ:\mercredi. 4614 fichiers DEBUT20 erreursFIN2 12893 fichiers traités. Durée de la sauvegarde : 11 minutes et 40 secondes]
Return-Path: DEBUT1toto4@wanadoo.frFIN1
[09/10/2008 02:14:11 : Fin de copie : D:\CLAUDE, D:\Dir, D:\eric, D:\hervé, D:\Nicolas, D:\appli. versZ:\mercredi. 7367 fichiers DEBUT20 erreursFIN2 68151 fichiers traités. Durée de la sauvegarde : 254 minutes et 9 secondes]
Return-Path: DEBUT1toto5@aol.comFIN1
[08/10/2008 21:00:09 : Fin de copie : D:\Commun, D:\appli. versZ:\mercredi. 61 fichiers DEBUT20 erreursFIN2 1396 fichiers traités. Durée de la sauvegarde : 8 secondes]
Return-Path: DEBUT1toto4@aol.comFIN1
[08/10/2008 21:01:36 : Fin de copie : D:\appl, D:\Img2. versZ:\mercredi\database. 93 fichiers DEBUT20 erreursFIN2 962 fichiers traités. Durée de la sauvegarde : 1 minutes et 15 secondes]
Return-Path: DEBUT1toto7@aol.comFIN1
[08/10/2008 21:02:25 : Fin de copie : D:\DC, D:\DS13. versZ:\mercredi\database\cpta. 92 fichiers DEBUT20 erreursFIN2 445 fichiers traités. Durée de la sauvegarde : 39 secondes]

Encore merci pour ton aide !
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 881
Bon en fait dans mon exemple j'avais oublié de rediriger la sortie ves "new_fich", donc à rectifier, mais ce n'est pas obligé, tu peux très bien faire un pipe (|) vers l'autre commande.

Sinon avec ton fichier c'est normal que ça ne marche pas dans la mesure où on ne tient pas compte des erreurs nulles (0), et comme il n'y a que ça (des erreurs égales à 0, forcément aucun résultat n'est envoyé vers la sortie standard (l'écran) ;-))

Sinon la 1ère partie de la syntaxe marche bien :
[tmpfs]$ cat nilz
Return-Path: DEBUT1toto1@wanadoo.frFIN1
[08/10/2008 22:03:40 : Fin de copie : D:\Commun,D:\Prog, D:\Utils, D:\Test versZ:\Mercredi\. 715 fichiers DEBUT20 erreursFIN2 2630 fichiers traités. Durée de la sauvegarde : 4 minutes et 39 secondes]
Return-Path: DEBUT1toto2@wanadoo.frFIN1
[08/10/2008 22:05:51 : Fin de copie : D:\appli\, D:\Bulte. versZ:\Mercredi\. 340 fichiers DEBUT20 erreursFIN2 1379 fichiers traités. Durée de la sauvegarde : 2 minutes et 1 secondes]
Return-Path: DEBUT1toto3@wanadoo.frFIN1
[08/10/2008 23:10:41 : Fin de copie : D:\Commun, D:\appli. versZ:\mercredi. 4614 fichiers DEBUT20 erreursFIN2 12893 fichiers traités. Durée de la sauvegarde : 11 minutes et 40 secondes]
Return-Path: DEBUT1toto4@wanadoo.frFIN1
[09/10/2008 02:14:11 : Fin de copie : D:\CLAUDE, D:\Dir, D:\eric, D:\hervé, D:\Nicolas, D:\appli. versZ:\mercredi. 7367 fichiers DEBUT20 erreursFIN2 68151 fichiers traités. Durée de la sauvegarde : 254 minutes et 9 secondes]
Return-Path: DEBUT1toto5@aol.comFIN1
[08/10/2008 21:00:09 : Fin de copie : D:\Commun, D:\appli. versZ:\mercredi. 61 fichiers DEBUT20 erreursFIN2 1396 fichiers traités. Durée de la sauvegarde : 8 secondes]
Return-Path: DEBUT1toto4@aol.comFIN1
[08/10/2008 21:01:36 : Fin de copie : D:\appl, D:\Img2. versZ:\mercredi\database. 93 fichiers DEBUT20 erreursFIN2 962 fichiers traités. Durée de la sauvegarde : 1 minutes et 15 secondes]
Return-Path: DEBUT1toto7@aol.comFIN1
[08/10/2008 21:02:25 : Fin de copie : D:\DC, D:\DS13. versZ:\mercredi\database\cpta. 92 fichiers DEBUT20 erreursFIN2 445 fichiers traités. Durée de la sauvegarde : 39 secondes]

[tmpfs]$ sed '/^$/d;N;s/.*DEBUT1\(.*\)FIN1.*DEBUT2\(.*\)FIN2.*/\1\n\2/' nilz
toto1@wanadoo.fr
0 erreurs
toto2@wanadoo.fr
0 erreurs
toto3@wanadoo.fr
0 erreurs
toto4@wanadoo.fr
0 erreurs
toto5@aol.com
0 erreurs
toto4@aol.com
0 erreurs
toto7@aol.com
0 erreurs
[tmpfs]$
Voilà un exemple des commandes avec un "pipe" :
sed '/^$/d;N;s/.*DEBUT1\(.*\)FIN1.*DEBUT2\(.*\)FIN2.*/\1\n\2/' nilz | sed -n 'h;N;/.*\n0/! s/\n/ /p'
Si tu veux que ça marche, remplace quelques "0 erreurs" par des "x erreurs" par ci par là...