Mise en forme de données récupérées [Résolu/Fermé]

Signaler
Messages postés
7
Date d'inscription
mardi 24 juin 2014
Statut
Membre
Dernière intervention
7 juillet 2014
-
Messages postés
7
Date d'inscription
mardi 24 juin 2014
Statut
Membre
Dernière intervention
7 juillet 2014
-
Bonjour à tous,

Voici mon problème :

Des mails sont envoyés à une adresse qui les convertit en fichiers .txt
Sur ces fichiers .txt, je dois récupérer l'expéditeur du mail (le From), le destinataire (le To) et la date d'envoi.

La conversion des mails en fichiers .txt donne cela :

From: "DUPONT Pierre [CERA]" <dupont.pierre@gmail.fr>
To: =?iso-8859-1?Q?MARTIN_Julien_=5BCERA=5D?=
<julien.martin@gmail.fr>
Subject: SAV AGENCE
Thread-Topic: SAV AGENCE
Thread-Index: Ac+JYBcZ/f1fG23NS82TEygEo3u5mw==
Date: Mon, 16 Jun 2014 14:45:08 +0200


Pour l'instant mon code est le suivant :

Code
#echo "Recuperation de l'expediteur"
#EXPEDITEUR=$(awk 'BEGIN {FS = ":";} $1 == "From" {print $0;}' ${SAVAGE_HOME}/fichiers/SAV_AGENCE__91bc915d93b2803546aaf344ace9527cc9e3c06f5b7a1d2b19adeaf02893d01b.txt)
#
#echo "Recuperation de la date"
#DATE_ENVOI=$(awk 'BEGIN {FS = ":";} $1 == "Date" {print $0;}' ${SAVAGE_HOME}/fichiers/SAV_AGENCE__91bc915d93b2803546aaf344ace9527cc9e3c06f5b7a1d2b19adeaf02893d01b.txt)

RES=$(awk 'BEGIN {FS = ":"; varFrom = ""; varTo = ""; varDate = ""; flag = 0;}
$1 == "Subject" {flag=0;}
flag == 1 {varTo = varTo $0;}
$1 == "From" {varFrom = $0;}
$1 == "To" {varTo = $0; flag=1;}
$1 == "Date" {varDate = $0;}
END {print varFrom "µ"; print varTo "µ"; print varDate;}' ${SAVAGE_HOME}/fichiers/SAV_AGENCE__91bc915d93b2803546aaf344ace9527cc9e3c06f5b7a1d2b19adeaf02893d01b.txt)

echo ${RES} | IFS="µ" read EXPEDITEUR DESTINATAIRE DATE_ENVOI

$EXPEDITEUR =

echo "EXPEDITEUR=${EXPEDITEUR}"
echo "DESTINATAIRE=${DESTINATAIRE}"
echo "DATE_ENVOI=${DATE_ENVOI}"




Et me permet de récupérer les données sous cette forme :


EXPEDITEUR=From: "DUPONT Pierre" <pierre.dupont@gmail.fr>
DESTINATAIRE= To: =?iso-8859-1?Q?MARTIN_Julien_=5BCERA=5D?=
<julien.martin@gmail.fr>
DATE_ENVOI= Date: Mon, 16 Jun 2014 14:45:08 +0200




Mon problème concerne en fait la mise en forme de ces données récupérées :
- J'aimerais récupérer seulement l'adresse mail qui est entre <> pour l'expéditeur
- Idem pour le destinataire (à noter que pour l'instant je récupère le destinataire sur deux lignes et c'est seulement la 2ème qui m'intéresse)
- Pour la date, j'aimerai la convertir en JJ/MM/AAAA


Merci d'avance pour votre aide !


5 réponses

Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 168
Salut,

Pour les trois lignes à récupérer :

$ cat plop 
From: "DUPONT Pierre [CERA]" <dupont.pierre@gmail.fr>
To: =?iso-8859-1?Q?MARTIN_Julien_=5BCERA=5D?=
<julien.martin@gmail.fr>
Subject: SAV AGENCE
Thread-Topic: SAV AGENCE
Thread-Index: Ac+JYBcZ/f1fG23NS82TEygEo3u5mw==
Date: Mon, 16 Jun 2014 14:45:08 +0200

$ grep -Po '(<|Date: )\K[^>]*' plop
dupont.pierre@gmail.fr
julien.martin@gmail.fr
Mon, 16 Jun 2014 14:45:08 +0200

Et pour la date (à partir de la dernière ligne récupérée) :

$ date -d 'Mon, 16 Jun 2014 14:45:08 +0200' '+%d/%m/%Y'
16/06/2014

1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
18240
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
30 novembre 2020
5 279
hello
en supposant que le destinataire est toujours à la ligne suivant le To:
essayer
$ read EXP DEST DATE <<<$(awk -F "[<> ]" '/^From:/ {print $(NF-1)} /^To:/ {getline; print $(NF-1)} /^Date:/ {$1=""; print}' fichier)
$ DATE=$(date -d "$DATE" "+%d/%m/%Y")
$ printf "%s\n" $EXP $DEST $DATE
dupont.pierre@gmail.fr
julien.martin@gmail.fr
16/06/2014
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
7
Date d'inscription
mardi 24 juin 2014
Statut
Membre
Dernière intervention
7 juillet 2014

Merci à vous deux pour vos réponses !

Etant débutant dans ce langage de programmation, je n'ai pas trop compris l'explication de zipe31.. notamment le $ cat plop . Il permet de récupérer les données telles que je les ai déjà actuellement ?

dubcek voici l'état de mon code actuellement :

# == Suivi - Debut des traitements
${SUIVI_DEBUT} ${ID_TRT} SHELL $0


RES=$(awk 'BEGIN {FS = ":"; varFrom = ""; varTo = ""; varDate = ""; flag = 0;}
$1 == "Subject" {flag=0;}
flag == 1 {varTo = varTo $0;}
$1 == "From" {varFrom = $0;}
$1 == "To" {varTo = $0; flag=1;}
$1 == "Date" {varDate = $0;}
END {print varFrom "µ"; print varTo "µ"; print varDate;}' ${SAVAGE_HOME}/fichiers/SAV_AGENCE__91bc915d93b2803546aaf344ace9527cc9e3c06f5b7a1d2b19adeaf02893d01b.txt)


echo ${RES} | IFS="µ" read EXPEDITEUR DESTINATAIRE DATE_ENVOI <<<$(awk -F "[<> ]" '/^From:/ {print $(NF-1)} /^To:/ {getline; print $(NF-1)} /^Date:/ {$1=""; print}' ${SAVAGE_HOME}/fichiers/SAV_AGENCE__91bc915d93b2803546aaf344ace9527cc9e3c06f5b7a1d2b19adeaf02893d01b.txt)
$ DATE_ENVOI=$(date -d "$DATE_ENVOI" "+%d/%m/%Y")

echo "EXPEDITEUR=${EXPEDITEUR}"
echo "DESTINATAIRE=${DESTINATAIRE}"
echo "DATE_ENVOI=${DATE_ENVOI}"


Ca fonctionne bien pour l'expéditeur, je ne récupère rien pour le destinataire, et pour la date ça ne fonctionne pas non plus. Pourtant vous avez êtes tous les deux d'accord sur le code à mettre en place.

Peut-être que je ne le place pas au bon endroit ? Je me répète, je suis vraiment débutant donc excusez moi si je fais des erreurs grossières.

Merci encore pour votre aide
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 168
Non, tu ne dois la mettre nulle part, elle est juste là pour te montrer sur quoi j'ai lancé ma commande.
Messages postés
7
Date d'inscription
mardi 24 juin 2014
Statut
Membre
Dernière intervention
7 juillet 2014

Ok mais aprés tu met l'instruction suivante : $ grep -Po '(<|Date: )\K[^>]*' plop
En fait je ne vois pas par quoi remplacer le plop sachant que je ne l'ai pas dans mon code que j'ai mi plus haut.
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 168
Tu remplaces plop par chaque fichier .txt
Messages postés
18240
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
30 novembre 2020
5 279
a moi: à cause du echo $RES | read..., les variables du read sont définies dans un sous process, donc perdues
Messages postés
7
Date d'inscription
mardi 24 juin 2014
Statut
Membre
Dernière intervention
7 juillet 2014

Bon ça ne marche pas mieux...
Je vais essayer de reprendre tout ce que vous m'avez dit pour bien comprendre.

Merci encore !
Messages postés
7
Date d'inscription
mardi 24 juin 2014
Statut
Membre
Dernière intervention
7 juillet 2014

J'ai réussi à avancer concernant ma récupération de données :

Voici le code que j'ai mis en place :

RES=$(awk 'BEGIN {FS = ":"; varFrom = ""; varTo = ""; varDate = ""; flag = 0; vPdeb=0; vPfin=0;}

$1 == "Subject" {flag=0;}

flag == 1 {varTo = varTo $0; vPdeb=index(varTo,"<");vPfin=index(varTo,">"); varTo = substr(varTo,vPdeb+1,vPfin-vPdeb-1); }

$1 == "From" {vPdeb=index($0,"<");vPfin=index($0,">");varFrom = substr($0,vPdeb+1,vPfin-vPdeb-1);}

$1 == "To" {varTo = $0; flag=1;}

$1 == "Date" {vPdeb=index($0,",")+1;vPfin=index($0,"+")-1; varDate = substr($0,vPdeb+1,vPfin-vPdeb-1);}

END {print sprintf("export EXPEDITEUR=%s;export DESTINATAIRE=%s;export DATE_ENVOI=\"%s\"",varFrom,varTo,varDate);}' ${SAVAGE_HOME}/fichiers/SAV_AGENCE__91bc915d93b2803546aaf344ace9527cc9e3c06f5b7a1d2b19adeaf02893d01b.txt)

echo "$RES"


Et voici ce que je récupère :


export EXPEDITEUR=pierre.dupont@gmail.fr;export DESTINATAIRE=julien.martin@gmail.fr;export DATE_ENVOI="16 Jun 2014 14:45:08"


Mon problème est désormais de pouvoir récupérer ces données sous cette forme :

EXPEDITEUR=pierre.dupont@gmail.fr;
DESTINATAIRE=julien.martin@gmail.fr;
DATE_ENVOI="16 Jun 2014 14:45:08"


Je ne vois pas trop comment faire cela. Donc si vous avez une idée ?

Merci d'avance
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 168
END {printf "EXPEDITEUR=%s;\nDESTINATAIRE=%s;\nDATE_ENVOI=\"%s\"\n",varFrom,varTo,varDate);}'
Messages postés
18240
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
30 novembre 2020
5 279
read EXPEDITEUR DESTINATAIRE DATE_ENVOI <<<$(awk ....
.......
# changer le block END
END {printf "%s %s \"%s\"", varFrom, varTo, varDate}
)
Messages postés
7
Date d'inscription
mardi 24 juin 2014
Statut
Membre
Dernière intervention
7 juillet 2014

J'ai réussi à récupérer ce que je souhaitais, voilà mon code :


 read EXPEDITEUR <<<$(awk -F "[<> ]" '/^From:/ {print $(NF-1)} ' ${SAVAGE_HOME}/fichiers/SAV_AGENCE__91bc915d93b2803546aaf344ace9527cc9e3c06f5b7a1d2b19adeaf02893d01b.txt)

DESTINATAIRE=$(awk 'BEGIN {FS = ":"; varTo = ""; flag = 0;}
$1 == "Subject" {flag=0;}
flag == 1 {vPdeb=index($0,"<");vPfin=index($0,">"); varTo = varTo ";" substr($0,vPdeb+1,vPfin-vPdeb-1) ";";}
$1 == "To" {vPdeb=index($0,"<");vPfin=index($0,">"); varTo = substr($0,vPdeb+1,vPfin-vPdeb-1); flag=1;}
END {print varTo;}' ${SAVAGE_HOME}/fichiers/SAV_AGENCE__91bc915d93b2803546aaf344ace9527cc9e3c06f5b7a1d2b19adeaf02893d01b.txt)

DATE_ENVOI=$(awk 'BEGIN {FS = ":"; varDate = ""; flag = 0; vPdeb=0; vPfin=0;}
$1 == "Date" {vPdeb=index($0,",")+1;vPfin=index($0,"+")-1; varDate = substr($0,vPdeb+1,vPfin-vPdeb-1);}
END {print sprintf("export DATE_ENVOI=\"%s\"",varDate);}' ${SAVAGE_HOME}/fichiers/SAV_AGENCE__91bc915d93b2803546aaf344ace9527cc9e3c06f5b7a1d2b19adeaf02893d01b.txt)
eval "$DATE_ENVOI"

echo "EXPEDITEUR=${EXPEDITEUR}"
echo "DESTINATAIRE=${DESTINATAIRE}"
echo "DATE_ENVOI=${DATE_ENVOI}"

et voici ce que je récupère :


EXPEDITEUR=pierre.dupont@gmail.fr
DESTINATAIRE=julien.martin@gmail.fr
DATE_ENVOI=16 Jun 2014 14:45:08

Le problème que je rencontre désormais est que j'aimerai intégrer ces résultats dans 3 variables VarFrom, VarTo, et VarDate.

J'ai essayé avec ce code mais ça ne fonctionne pas...

varFrom=$(EXPEDITEUR)
varTo=$(DESTINATAIRE)
varDate=$(DATE_ENVOI)

Merci d'avance pour votre aide