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

Le
christophe
--nextPart1819977.zfzXL4FAbb
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

Bonjour la liste !

Après une brève recherche, je me tourne vers vous pour résoudre ce pr=
oblè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 truc@machin.com>
Subject: blabla
To: lui@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 suc=
cé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, traitem=
ent
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'u=
n
connaît.

Merci.

--
christophe

--nextPart1819977.zfzXL4FAbb
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: This is a digitally signed message part.

--BEGIN PGP SIGNATURE--
Version: GnuPG v2.0.9 (GNU/Linux)

iEYEABECAAYFAktgiBYACgkQKER8TKznJiFV0wCgjBKHKhlpkK0bFdmerPTZuxkJ
X40An1/rg67nmED6XKbVppJ9dIL1FOFB
=N5cu
--END PGP SIGNATURE--

--nextPart1819977.zfzXL4FAbb--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jeremie COURREGES-ANGLAS
Le #21065991
--liOOAslEiF7prFVr
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Le mercredi 27 janvier 2010 à 07:38:09, christophe a écrit :
Bonjour la liste !


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

Merci.

--
christophe



Ahem, je sais pas s'il y a une solution élégante, mais moi j'en a urais peut-être une
qui a l'air de faire ce que tu cherches :

## BEGIN CRADE BASH CODE

#!/bin/bash

[ $# -eq 0 ] && printf "Usage : $0 fichier [ autrefichier... ]n" >&2 && ex it 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écomment er
#if [ -n "$line" ]; then
echo "$line" >> "$file_base$fileno"
#fi

done < "$file_base"

done

# END CRADE BASH CODE


Voilà.
J'ai pas dit que c'était élégant..

--
"Free software, free society."
Jérémie Courrèges-Anglas GPG key : 1D7E 79DA

--liOOAslEiF7prFVr
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: Digital signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iEYEARECAAYFAktgnZgACgkQBw8giR1+edrveQCePWUFcw6YPnzlJ+BlyCP8MSri
6e4AoILXHIU087b4vMPIYiAFudtcEilR
=M4Mw
-----END PGP SIGNATURE-----

--liOOAslEiF7prFVr--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
christophe
Le #21067781
--nextPart1625209.hKfEOfIQKm
Content-Type: text/plain;
charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

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écomme nter
#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 m e donne bien
autant de fichiers qu'il y a de messages après le premier. Seul le pre mier ne
devient pas un fichier. Inverser les deux boucles à l'intérieur d u while ?
D'autre part, il faudrait juste que je supprime les deux retour à la l igne 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

--nextPart1625209.hKfEOfIQKm
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: This is a digitally signed message part.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.9 (GNU/Linux)

iEYEABECAAYFAktgxeYACgkQKER8TKznJiGhhQCeNXGdgizdL/RKe+1tXgLEjWdv
kzsAnjXj4tG7bk0NO4MUb0uEtSikJBVT
=sZQB
-----END PGP SIGNATURE-----

--nextPart1625209.hKfEOfIQKm--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Jeremie COURREGES-ANGLAS
Le #21067961
--GRPZ8SYKNexpdSJ7
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

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 :
> > [...]



#!/bin/bash

[ $# -eq 0 ] && printf "Usage : $0 fichier [ autrefichier... ]n" >&2 && ex it 1

# initialisation oubliée
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
fileno=$((fileno + 1))
continue
fi

# version corrigée
if [ "$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 p remier 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 e t le fi n'a pas
suffi. Supprimer les "n" ???
Merci encore.

--
christophe



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 mauv aise nouvelle
à t'annoncer : l'exécution du script aura vraisemblablement recop ié le contenu du premier
mail à la suite du dernier, dans le fichier de base ; ceci à caus e 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.

--
"Free software, free society."
Jérémie Courrèges-Anglas GPG key : 1D7E 79DA

--GRPZ8SYKNexpdSJ7
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: Digital signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iEYEARECAAYFAktgzbkACgkQBw8giR1+edp4FwCeI02ZLsUw0IwM5Rt/MRd6/n1H
rL8An2SOIlcUQZ8Kn8RbglAN0tAqm4FV
=hf/6
-----END PGP SIGNATURE-----

--GRPZ8SYKNexpdSJ7--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Alexandre
Le #21068411
Le mercredi 27 janvier de l'année 2010, vers 19 heures et 38 minutes, christophe écrivait:
Bonjour la liste !



Bonjour :)

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
Subject: blabla
To:
Date: Tue, 29 Apr 2003 22:26:37 +0100

textedemonmailsuperinterressant....




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

--
Alexandre Delanoë

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
christophe
Le #21077381
--nextPart2374028.AL5mHgPf99
Content-Type: text/plain;
charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

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 av ez
>
> é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 fich iers
mbox qu'il y a de messages dans le fichier initial :

#!/bin/bash

[ $# -eq 0 ] && printf "Usage : $0 fichier [ autrefichier... ]n" >&2 && ex it
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

--nextPart2374028.AL5mHgPf99
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: This is a digitally signed message part.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.9 (GNU/Linux)

iEYEABECAAYFAktiCIkACgkQKER8TKznJiHDqgCdFy/bsYSfHIEYSN++e/Td7ZN3
pRMAni/dxcalP0bjFZOEJ3OKrbywVDUL
=BPGA
-----END PGP SIGNATURE-----

--nextPart2374028.AL5mHgPf99--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
christophe
Le #21077501
--nextPart40811781.hBRNCRsKM6
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

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

--nextPart40811781.hBRNCRsKM6
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: This is a digitally signed message part.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.9 (GNU/Linux)

iEYEABECAAYFAktiCbcACgkQKER8TKznJiEE3wCeLGh6eOGwmTlIcoduAmDbfavh
yYsAoMcp4chFwEWn3NFh0X6ysFvsn4OM
=Zzk3
-----END PGP SIGNATURE-----

--nextPart40811781.hBRNCRsKM6--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Publicité
Poster une réponse
Anonyme