Awk extraire une partie d'un fichier

Résolu
titexe Messages postés 55 Statut Membre -  
jipicy Messages postés 41342 Statut Modérateur -
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 21644 Statut Modérateur, Contributeur sécurité 3 570
 
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 Statut Membre 1
 
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 41342 Statut Modérateur 4 896
 
Salut,
sed -n '/filename/,/^\&/p' ton_fichier
devrait le faire ;-))
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
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