Au secours ! awk sed cours !

Résolu/Fermé
pmx Messages postés 138 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 14 mars 2008 - 13 mars 2008 à 15:34
pmx Messages postés 138 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 14 mars 2008 - 14 mars 2008 à 12:13
Bonjour,

Pour exploiter un log d'imprimante xerox docutech

j'ai un fichier de cette forme :
-------------------------------------
a=1;b=2;d=bla bla;e=5
a=xxx;b=2a;c=c;d=4;e=5
-------------------------------------
chaque colonne est séparée par un ; et contient une expression de la forme a=xxx
remarquez que la 3eme colonne concene d pour la 1ere ligne, et c pour la 2eme

J'ai besoin d'extraire seulement quelques colonnes en les repérant par ce qui est à gauche du signe =
sed "s/.*\(b=.*;\).*/\1/" me ramène b= en début de ligne, mais le reste de la ligne avec :-(

J'aimerai obtenir ça :
b=2
b=2a;c=c

si ce n'est pas clair, n'hésitez pas à le dire
Merci pour vos suggestions !

5 réponses

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
14 mars 2008 à 11:29
jp@MDK:~/tmpfs ssh$ cat pmx
a=1;b=2;d=bla bla;e=5
a=xxx;b=2a;c=c;d=4;e=5

jp@MDK:~/tmpfs ssh$ var=a; sed -n '/'"$var"'=/ s/.*\('"$var"'=[^;]*\).*/\1/p' pmx
a=1
a=xxx

jp@MDK:~/tmpfs ssh$ var=b; sed -n '/'"$var"'=/ s/.*\('"$var"'=[^;]*\).*/\1/p' pmx
b=2
b=2a

jp@MDK:~/tmpfs ssh$ var=c; sed -n '/'"$var"'=/ s/.*\('"$var"'=[^;]*\).*/\1/p' pmx
c=c

jp@MDK:~/tmpfs ssh$ var=e; sed -n '/'"$var"'=/ s/.*\('"$var"'=[^;]*\).*/\1/p' pmx
e=5
e=5

jp@MDK:~/tmpfs ssh$
;-))
1
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
13 mars 2008 à 16:33
Salut,
sed 's/.*\(b=.*\);d=.*/\1/'
;-))
0
pmx Messages postés 138 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 14 mars 2008 28
14 mars 2008 à 10:00
Merci pour ta réponse, mais je ne peux pas compter sur la présence de d=, qui n'est pas forcemment toujours là.
Il faut vraiment que je me base sur ce qui est à gauche du signe =, sans tenir compte de la position du champ par rapport aux autres.
A+
pmx
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
14 mars 2008 à 10:05
Ok, mais alors, ça :J'aimerai obtenir ça :
b=2
b=2a;c=c

c'est pas possible ;-((

Pour le 1er oui, mais pas pour le second !
Sinon :
 sed 's/.*\(b=[^;d]*\).*/\1/'
;-))
0
pmx Messages postés 138 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 14 mars 2008 28
14 mars 2008 à 11:21
Merci encore, mais je vois "d" dans l'expression et ça ne va pas.
Exprimé autrement :
Quelques soient les autres champs qui les entoure, je souhaite extraire certaines "colonnes' de mon fichier log en identifiant les-dites colonnes par leur "type" a= ou b= ou x=, mais pas par leur position ni par leurs voisins.
Les colonnes sont séparées par des ;

C'est comme si je "sourçais" chaque ligne pour avoir des variables d'environnement que je pourrais ensuite exploiter.
Mais c'est une solution gourmande en ressource et je pense que sed ou awk peuvent le faire.

Merci pour ton intérêt à mon problème :-)
pmx
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pmx Messages postés 138 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 14 mars 2008 28
14 mars 2008 à 12:13
Yes !!!!!!
Je vais traiter ligne par ligne avec ta méthode et ça devrait aller.
Extraire les champs un par un et les stocker dans des variables ça me va.
Merci JP
10/10 ;-)
pmx
-1