Awk extraire une partie d'un fichier

Résolu/Fermé
Signaler
Messages postés
55
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
16 août 2010
-
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
-
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.

3 réponses

Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 562
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
Messages postés
55
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
16 août 2010
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,
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 891
Salut,
sed -n '/filename/,/^\&/p' ton_fichier
devrait le faire ;-))
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 891
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
;-))