Awk extraire une partie d'un fichier

Résolu/Fermé
titexe Messages postés 55 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 16 août 2010 - 28 nov. 2006 à 10:33
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 28 nov. 2006 à 22:03
Bonjour,

nous recevons toujours des fichiers dans le format ci_dessous et on voudrait extraire que la derniére partie dans un autre fichier avec un script awk;


le format du fichier recus :


This is a multi-part message in MIME format.

------=_NextPart_000_0121_01C708D0.7AEEAB30
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 8bit



-----Message d'origine-----
De : KHALID MONCEF
Envoyé : mercredi 15 novembre 2006 15:49
À : 'pfe@gis.ma'
Objet : Envoi d'un message : OR99CT99SMIMESIGNECRYPTE_15-11-2006.unl


Le message est prêt à être envoyé avec le fichier suivant ou les liens
joints :

OR99CT99SMIMESIGNECRYPTE_15-11-2006.unl


Remarque : pour se protéger de virus informatiques, il se peut que les
programmes de messagerie électronique évitent d'envoyer ou de recevoir
certains types de pièces jointes. Vérifiez les paramètres de sécurité de
votre messagerie électronique pour déterminer de quelle manière les pièces
jointes sont gérées.

------=_NextPart_000_0121_01C708D0.7AEEAB30
Content-Type: application/octet-stream;
name="OR99CT99SMIMESIGNECRYPTE_15-11-2006.unl"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="OR99CT99SMIMESIGNECRYPTE_15-11-2006.unl"
@|99|OR|99|CT|200608091600|2006|212121||DD|TEST||||
D|2006|121201300030001011|08|1|1014|1365|xxxxx|1|1|10|10/01/2005|20/01=/2005||||||
D|2006|121201300030001012|08|1|1014|1365|xxxxxxx|1|2|11|10/01/2005|20/01=/2005||||||
D|2006|121201300000001040|08|1|1014|1365|xxxxxxx|2|3|15|15/01/2005|21/01=/2005||||||
D|2006|121201300000001060|08|1|1014|1365|xxxxxxxx|2|4|16|15/01/2005|21/01=/2005||||||
D|2006|320011300800001011|08|3200113008|1014|1365|4000000|3|5|12|12/01/2005|21/01/2005||||||
D|2006|320011300800001020|08|3200113008|1014|1365|4000000|3|6|13|13/01/2=2005|21/01/2005||||||
&|6|

---_NextPart_000_0121_01C708D0.7AEEAB30--

ce que nous voulons extraire , c'est juste la derniére partie:

filename="OR99CT99SMIMESIGNECRYPTE_15-11-2006.unl"
@|99|OR|99|CT|200608091600|2006|212121||DD|TEST||||
D|2006|121201300030001011|08|1|1014|1365|xxxxx|1|1|10|10/01/2005|20/01=/2005||||||
D|2006|121201300030001012|08|1|1014|1365|xxxxxxx|1|2|11|10/01/2005|20/01=/2005||||||
D|2006|121201300000001040|08|1|1014|1365|xxxxxxx|2|3|15|15/01/2005|21/01=/2005||||||
D|2006|121201300000001060|08|1|1014|1365|xxxxxxxx|2|4|16|15/01/2005|21/01=/2005||||||
D|2006|320011300800001011|08|3200113008|1014|1365|4000000|3|5|12|12/01/2005|21/01/2005||||||
D|2006|320011300800001020|08|3200113008|1014|1365|4000000|3|6|13|13/01/2=2005|21/01/2005||||||
&|6|

D'avance merci,

je suis qu'un débutant , merci de m'aider a completer cette tache,

Cordialement.
A voir également:

3 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
28 nov. 2006 à 10:41
Salut,

je vois que la solution que je t'ai donné ne te satisfait pas :-)), pourtant elle fait ce que tu demandes.

Voici une solution sed et awk. Merci asevere.

lami20j
0
titexe Messages postés 55 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 16 août 2010 1
28 nov. 2006 à 11:07
Salut,

le probléme c'est que je suis pas fort en perl, tout a fait une solution sed et awk peut faire la faire,

le probléme c'est que dans mon fichier j'ai qu'un seul délimiteur c'est "filename" et le deuxiéme n'est pas difinie ca doit etre toujours la ligne qui commence par &...

comment je ferais dans ce cas la ?

Merci pour ton aide,
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
28 nov. 2006 à 20:57
Salut,
sed -n '/filename/,/^\&/p' ton_fichier
devrait le faire ;-))
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
28 nov. 2006 à 22:03
Re-

Sinon pour faire ce que tu demandes là, essaie ça :
#! /bin/bash
# script_titexe.sh

# On récupère dans un fichier (resultat.txt) le paragraphe contenu entre 
#+ "filename" et un "&" en début de ligne

sed -n '/filename/,/^\&/p' fich.txt > resultat.txt

# On récupère le nom du fichier dans une variable

var=$(grep filename resultat.txt | awk -F= '{ print $2 }'|sed 's/\"//'g)

# On efface la 1ère ligne

sed -i '/filename/d' resultat.txt

# On insère en début de fichier le nom du fichier suivi d'un saut de ligne
#+ puis d'un autre et enfin sur la 3 ème ligne du mot "Contenu ="

sed -i 1i"Nom du fichier = $var\n\nContenu =" resultat.txt
;-))
0