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.


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.