Re: Découper un fichier texte en plusieurs fichiers en coupant à telle ligne

2010-01-28 Par sujet christophe
Le Thursday 28 January 2010 00:35:21 Jeremie COURREGES-ANGLAS, vous avez 
écrit :
 Le jeudi 28 janvier 2010 à 12:01:53, christophe a écrit :
  Le Wednesday 27 January 2010 21:10:00 Jeremie COURREGES-ANGLAS, vous avez
 
  écrit :
   Le mercredi 27 janvier 2010 à 07:38:09, christophe a écrit :
[...]
 Désolé donc de ne pas avoir passé plus de temps à la vérification de 10
 lignes de code... cette version devrait te donner satisfaction.
 malheureusement j'ai une mauvaise nouvelle à t'annoncer : l'exécution du
 script aura vraisemblablement recopié le contenu du premier mail à la suite
 du dernier, dans le fichier de base ; ceci à cause du « echo $line 
 $file_base$fileno »
 alors que fileno était vide.
 Comme quoi un oubli d'initialisation de variable peut être facheux...
 Le test [ $line !=  ] supprimera _toutes_ les lignes vides de _tous_
 tes mails.
 Mes excuses pour le désagrément.

Merci, pour tout.
Voici ma version définitive qui m'a permis de d'obtenir autant de fichiers 
mbox qu'il y a de messages dans le fichier initial :

#!/bin/bash

[ $# -eq 0 ]  printf Usage : $0 fichier [ autrefichier... ]\n 2  exit 
1

fileno=1

for file_base in $@; do

while read -r line; do

# Peu importe le nombre exact de tirets autour de CUT HERE
if [[ $line == *-- CUT HERE --* ]]; then
csplit -z $file_base$fileno -f $file_base$fileno- /From:/+0
rm -f $file_base$fileno $file_base$fileno-00
fileno=$((fileno + 1))
continue
fi

if [ $line !=  ]  [ $line != \n ]; then
echo $line  $file_base$fileno
fi

done  $file_base
csplit -z $file_base$fileno -f $file_base$fileno- /From:/+0
rm -f $file_base$fileno $file_base$fileno-00
done


J'ai un peu tatonné et j'ai rajouté la suggestion de Alexandre.

Merci à tous.





-- 
christophe


signature.asc
Description: This is a digitally signed message part.


Re: Découper un fichier texte en plusieurs fichiers en coupant à telle ligne

2010-01-28 Par sujet christophe
Le Thursday 28 January 2010 07:56:00 Alexandre, vous avez écrit :
[...]

 à tester:
 csplit -zq TonFichierInitial.txt /From:/ {\*}
 Est-ce le résultat voulu ?

 --
 Alexandre Delanoë

Merci, fabuleux. Cette commande ne me donne pas vraiment ce que je voulais 
mais je l'ai adapté dans le script de Jeremie.
En fait, cette commande découpe à chaque fois qu'il y a From: et cette 
expression rationnelle se retrouve parfois dans le corps du texte.
Merci encore.

-- 
christophe


signature.asc
Description: This is a digitally signed message part.


Re: Découper un fichier texte en plusieurs fichiers en coupant à telle ligne

2010-01-28 Par sujet christophe
Le Thursday 28 January 2010 12:29:23 bernard.schoenac...@free.fr, vous avez 
écrit :
 [...]
 concernent votre soucis de fichier au format mbox
 le seul outil qui pourrait répondre : mboxgrep

 autrement, pourriez vous réinjecter les mail dans :

 cd  /var/mail/
 touch $yourmailbox
 chmod 600 $yourmailbox
 chown $user:8 $yourmailbox

 slt
 bernard

Je n'ai pas essayé ça, désolé.

-- 
christophe


signature.asc
Description: This is a digitally signed message part.


Re: Découper un fichier texte en plusieurs fichiers en coupant à telle ligne

2010-01-28 Par sujet christophe
Le Thursday 28 January 2010 12:39:47 Edi Stojicevic, vous avez écrit :
 * bernard.schoenac...@free.fr bernard.schoenac...@free.fr [2010-01-28
 12:29:23 +0100] wrote :

 Tu pourrais regarder le package mb2md qui te permet d'avoir une boite
 maildir avec pour chaque message un fichier ;)

Pas trouvé le programme, désolé.


-- 
christophe


signature.asc
Description: This is a digitally signed message part.


Découper un fichier texte en plusieurs fichiers en coupant à telle ligne

2010-01-27 Par sujet christophe
Bonjour la liste !

Après une brève recherche, je me tourne vers vous pour résoudre ce problème 
simple mais au dessus de mon faible niveau.
J'ai de vieux mails stockés dans des fichiers textes. Ils sont recopiés les 
uns à la suite des autres et séparés par une ligne comme ça :

 CUT HERE 



Chaque mail est sous la forme :



From: Bibi t...@machin.com
Subject: blabla
To: l...@parla.ici
Date: Tue, 29 Apr 2003 22:26:37 +0100

textedemonmailsuperinterressant



J'ai essayé de les importer avec mon mailer (kmail/kontact) mais sans succés : 
il ne reconnaît que le premier et les autres sont dans le corps de texte du 
premier email.
J'ai en vain chercher un outil de manipulation de texte (éditeur, traitement 
de texte) qui puisse me couper tout ça en petits fichiers (un fichier par 
mail) importables par un mailer.
Je suis sûr qu'il existe une solution simple et élégante que quelqu'un 
connaît.

Merci.

-- 
christophe


signature.asc
Description: This is a digitally signed message part.


Re: Découper un fichier texte en plusieurs fichiers en coupant à telle ligne

2010-01-27 Par sujet christophe
Le Wednesday 27 January 2010 21:10:00 Jeremie COURREGES-ANGLAS, vous avez 
écrit :
 Le mercredi 27 janvier 2010 à 07:38:09, christophe a écrit :
  [...]
 #!/bin/bash

 [ $# -eq 0 ]  printf Usage : $0 fichier [ autrefichier... ]\n 2 
 exit 1

 for file_base in $@; do

 while read -r line; do

   # Peu importe le nombre exact de tirets autour de CUT HERE
 if [[ $line == *-- CUT HERE --* ]]; then
 fileno=$((fileno + 1))
 continue
 fi

 # Souhaite t'on supprimer les lignes vides ? si oui, décommenter
 #if [ -n $line ]; then
 echo $line  $file_base$fileno
 #fi

 done  $file_base

 done

Merci, je viens juste de rentrer . Après avoir essayé : ça me donne bien 
autant de fichiers qu'il y a de messages après le premier. Seul le premier ne 
devient pas un fichier. Inverser les deux boucles à l'intérieur du while ?
D'autre part, il faudrait juste que je supprime les deux retour à la ligne qui 
restent alors à chaque début de message. Décomment le if et le fi n'a pas 
suffi. Supprimer les \n ???
Merci encore.

-- 
christophe


signature.asc
Description: This is a digitally signed message part.