Extraction de texte d'un fichier txt

Résolu
nilz -  
 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
Configuration: Windows XP
Firefox 2.0.0.17

5 réponses

  1. nilz
     
    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
    0
  2. Nilz
     
    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
    ++
    0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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 ;-))
    -1
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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$
    ;-))
    -1
    1. Nilz
       
      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 !
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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à...
    -1