Au secours ! awk sed cours !

Résolu/Fermé
Messages postés
138
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
14 mars 2008
-
Messages postés
138
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
14 mars 2008
-
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

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 900
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$
;-))
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 900
Salut,
sed 's/.*\(b=.*\);d=.*/\1/'
;-))
Messages postés
138
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
14 mars 2008
28
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
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 900
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/'
;-))
Messages postés
138
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
14 mars 2008
28
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
Messages postés
138
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
14 mars 2008
28
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