Awk extraire une partie d'un fichier
Résolu
titexe
Messages postés
55
Statut
Membre
-
jipicy Messages postés 41342 Statut Modérateur -
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.
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:
- Awk extraire une partie d'un fichier
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Extraire une video youtube - Guide
- Fichier rar - Guide
3 réponses
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
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
Re-
Sinon pour faire ce que tu demandes là, essaie ça :
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;-))
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,