[HS] extraire deux colonnes

Le
David Martin
--001a114013b6f81d4d0525fae65c
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Bonjour,

Je me casse les dents avec awk et sed pour extraire d'un fichier deux champ=
s
pour avoir le nom de mes bases et leur version.

ça se presente comme ça :

COMPTA:/u01/app/oracle/product/11.2.0.3/dbhome_1:N
COMPTAB:/u01/app/oracle/product/11.2.0.3/dbhome_1:N
PROD2:/u01/app/oracle/product/11.2.0.3/dbhome_1:N
COOIF:/u01/app/oracle/product/11.2.0.3/dbhome_1:N
COF:/u01/app/oracle/product/11.2.0.3/dbhome_1:N
PRGFUIT:/u01/app/oracle/product/11.2.0.3/dbhome_1:N
DLAMI:/u01/app/oracle/product/10.2.0.5/dbhome_1:N
MOTEUR:/u01/app/oracle/product/11.2.0.3/dbhome_1:N


J' aimerai avoir ce résultat :

COMPTA : 11.2.0.3
COMPTAB : 11.2.0.3
.

On me demande ça au boulot d'isoler version et nom de base pour un rap=
port
que le chef veut faire..

Si vous avez une idée de ce que doit modifier à cette commande :

cat /etc/oratab | awk -F ":" '{print $1}'

j'arrive à isoler le nom mais pas à afficher les version


--
david martin

--001a114013b6f81d4d0525fae65c
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir="ltr">Bonjour,<div><br></div><div>Je me casse les dents avec awk=
et sed pour extraire d&#39;un fichier deux champs</div><div>pour avoir le =
nom de mes bases et leur version.</div><div><br></div><div>ça se prese=
nte comme ça :</div><div><br></div><div><div>COMPTA:/u01/app/oracle/pr=
oduct/<a href="http://11.2.0.3/dbhome_1:N">11.2.0.3/dbhome_1:N</a></div><=
div>COMPTAB:/u01/app/oracle/product/<a href="http://11.2.0.3/dbhome_1:N">=
11.2.0.3/dbhome_1:N</a></div><div>PROD2:/u01/app/oracle/product/<a href="=
http://11.2.0.3/dbhome_1:N">11.2.0.3/dbhome_1:N</a></div><div>COOIF:/u01/ap=
p/oracle/product/<a href="http://11.2.0.3/dbhome_1:N">11.2.0.3/dbhome_1:N=
</a></div><div>COF:/u01/app/oracle/product/<a href="http://11.2.0.3/dbhom=
e_1:N">11.2.0.3/dbhome_1:N</a></div><div>PRGFUIT:/u01/app/oracle/product/<a=
href="http://11.2.0.3/dbhome_1:N">11.2.0.3/dbhome_1:N</a></div><div>DLAM=
I:/u01/app/oracle/product/<a href="http://10.2.0.5/dbhome_1:N">10.2.0.5/d=
bhome_1:N</a></div><div>MOTEUR:/u01/app/oracle/product/<a href="http://11=
.2.0.3/dbhome_1:N">11.2.0.3/dbhome_1:N</a></div><div><br></div><div><br></d=
iv><div>J&#39; aimerai avoir ce résultat :</div><div><br></div><div>CO=
MPTA : 11.2.0.3</div><div>COMPTAB : 11.2.0.3</div><div>.</div><div><b=
r></div><div>On me demande ça au boulot d&#39;isoler version et nom de=
base pour un rapport</div><div>que le chef veut faire..</div><div><br><=
/div><div>Si vous avez une idée de ce que doit modifier à cette c=
ommande :</div><div><br></div><div>cat /etc/oratab | awk -F &quot;:&quot; &=
#39;{print $1}&#39;<br></div><div><br></div><div>j&#39;arrive à isoler=
le nom mais pas à afficher les version</div><div><br></div><div><br><=
/div>-- <br><div class="gmail_signature"><div dir="ltr">david martin<di=
v><br></div></div></div>
</div></div>

--001a114013b6f81d4d0525fae65c--
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Sylvain L. Sauvage
Le #26380250
Le jeudi 3 décembre 2015, 10:20:30 David Martin a écrit :
Bonjour,



’jour,

[…]
COMPTA:/u01/app/oracle/product/11.2.0.3/dbhome_1:N
[…]
J' aimerai avoir ce résultat :

COMPTA : 11.2.0.3
[…]
cat /etc/oratab | awk -F ":" '{print $1}'



Au passage : UUOC (le 'cat' ne sert à rien).

j'arrive à isoler le nom mais pas à afficher les version



Tu as deux séparateurs, ':' et '/' donc il faudrait deux
passes, une pour extraire et l’autre pour nettoyer (ou en
utilisant 'split()' ou 'sub()' pour le nettoyage / second
découpage).

Déjà, le '/' est le plus complexe, donc la première ch ose est
de récupérer la version et conserver le premier champ :

awk -F/ '{print $1, $(NF-1)}' /etc/oratab

Et là, ô miracle, le premier champ (vis-à-vis de '/') est
'COMPTA:', le séparateur de sortie (OFS) est l’espace, don c la
première passe te donne :

COMPTA: 11.2.0.3

donc tu n’as même pas besoin de nettoyer le premier champ
(enlever le ':' en trop et mettre un ':' comme séparateur).
(Tu peux supprimer l’espace en mettant la variable OFS à " " :
awk -F/ 'BEGIN{OFS=""} {print $1, $(NF-1)}' /etc/oratab
)

--
Sylvain Sauvage
David Martin
Le #26380254
--001a11348b049579a30525fc0f5e
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Merci beaucoup, je suis vert de la simplicité que c'était.



Le 3 décembre 2015 10:24, Orvoine Bertrand écrit :



Le 03/12/2015 10:20, David Martin a écrit :

Bonjour,

Je me casse les dents avec awk et sed pour extraire d'un fichier deux
champs
pour avoir le nom de mes bases et leur version.

ça se presente comme ça :

COMPTA:/u01/app/oracle/product/11.2.0.3/dbhome_1:N
COMPTAB:/u01/app/oracle/product/11.2.0.3/dbhome_1:N
PROD2:/u01/app/oracle/product/11.2.0.3/dbhome_1:N
COOIF:/u01/app/oracle/product/11.2.0.3/dbhome_1:N
COF:/u01/app/oracle/product/11.2.0.3/dbhome_1:N
PRGFUIT:/u01/app/oracle/product/11.2.0.3/dbhome_1:N
DLAMI:/u01/app/oracle/product/10.2.0.5/dbhome_1:N
MOTEUR:/u01/app/oracle/product/11.2.0.3/dbhome_1:N


J' aimerai avoir ce résultat :

COMPTA : 11.2.0.3
COMPTAB : 11.2.0.3

cat /etc/oratab |cut -d/ -f1,6

de rien ...
A+

.......

On me demande ça au boulot d'isoler version et nom de base pour un r apport
que le chef veut faire.....

Si vous avez une idée de ce que doit modifier à cette commande :

cat /etc/oratab | awk -F ":" '{print $1}'

j'arrive à isoler le nom mais pas à afficher les version


--
david martin







--
david martin

--001a11348b049579a30525fc0f5e
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable




<div text="#000000" bgcolor="#FFFFFF"><span class="">
<br>
<br>
<div>Le 03/12/2015 10:20, David Martin a
écrit :<br>
</div>
<blockquote type="cite">
<div dir="ltr">Bonjour,
<div><br>
</div>
<div>Je me casse les dents avec awk et sed pour extraire d&#39;un
fichier deux champs</div>
<div><br>
</div>
<div>ça se presente comme ça :</div>
<div><br>
</div>
<div>
<div><br>
</div>
<div><br>
</div>
<div>J&#39; aimerai avoir ce résultat :</div>
<div><br>
</div>
</div>
</div>
</blockquote></span>
cat /etc/oratab |cut -d/ -f1,6  <br>
<br>
de rien ...<br>
A+<span class=""><br>
<br>
<blockquote type="cite">
<div dir="ltr">
<div>
<div><br>
</div>
<div>On me demande ça au boulot d&#39;isoler version et nom de
base pour un rapport</div>
<div><br>
</div>
<div>Si vous avez une idée de ce que doit modifier à ce tte
commande :</div>
<div><br>
</div>
<div>cat /etc/oratab | awk -F &quot;:&quot; &#39;{print $1}&#39;< br>
</div>
<div><br>
</div>
<div>j&#39;arrive à isoler le nom mais pas à afficher l es version</div>
<div><br>
</div>
<div><br>
</div>
-- <br>
<div>
<div dir="ltr">david martin
<div><br>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<br>
</span></div>

</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class ="gmail_signature"><div dir="ltr">david martin<div><br></div></div></di v>
</div>

--001a11348b049579a30525fc0f5e--
cedric rousselot
Le #26380258
Bonjour,

tu peux faire ceci:

cat /tmp/test |awk -F '/' '{print $1 " " $(NF-1) }'

(j'ai mis le contenu de ton fichier dans /tmp/test)

NF represente le dernier champ et donc NF-1 l'avant dernier.

bon courage.

Le Thu, 3 Dec 2015 10:20:30 +0100,
David Martin
Bonjour,

Je me casse les dents avec awk et sed pour extraire d'un fichier deux
champs pour avoir le nom de mes bases et leur version.

ça se presente comme ça :

COMPTA:/u01/app/oracle/product/11.2.0.3/dbhome_1:N
COMPTAB:/u01/app/oracle/product/11.2.0.3/dbhome_1:N
PROD2:/u01/app/oracle/product/11.2.0.3/dbhome_1:N
COOIF:/u01/app/oracle/product/11.2.0.3/dbhome_1:N
COF:/u01/app/oracle/product/11.2.0.3/dbhome_1:N
PRGFUIT:/u01/app/oracle/product/11.2.0.3/dbhome_1:N
DLAMI:/u01/app/oracle/product/10.2.0.5/dbhome_1:N
MOTEUR:/u01/app/oracle/product/11.2.0.3/dbhome_1:N


J' aimerai avoir ce résultat :

COMPTA : 11.2.0.3
COMPTAB : 11.2.0.3
.......

On me demande ça au boulot d'isoler version et nom de base pour un
rapport que le chef veut faire.....

Si vous avez une idée de ce que doit modifier à cette commande :

cat /etc/oratab | awk -F ":" '{print $1}'

j'arrive à isoler le nom mais pas à afficher les version







--
Cordialement,
Cedric Rousselot
Service Helpdesk
N° regroupement: 01.73.50.34.90
Jean-Marc
Le #26380283
--Signature=_Thu__3_Dec_2015_11_54_06_+0100_ucIw8W+YLwWOCVse
Content-Type: text/plain; charset=UTF-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Thu, 3 Dec 2015 10:24:55 +0100
Orvoine Bertrand
salut Bertrand, salut à tous,


>
> ça se presente comme ça :
>
> COMPTA:/u01/app/oracle/product/11.2.0.3/dbhome_1:N
> > COMPTAB:/u01/app/oracle/product/11.2.0.3/dbhome_1:N
> > [...]
> J' aimerai avoir ce résultat :
>
> COMPTA : 11.2.0.3
> COMPTAB : 11.2.0.3



Il y a une question que je me pose depuis pas mal de temps :
- pourquoi deux commandes et pas une seule ?

cat /etc/oratab | cut -d/ -f1,6



Je m'explique. Dans cet exemple (comme dans certains précédemment partagés ici;
merci aux contributeurs; j'espère vous aider aussi) :
1) cat lit un fichier et envoie son contenu vers la sortie standard (/dev/s tdout),
2) "|" redirige /dev/stdout vers l'entrée standard (/dev/stdin) de la commande suivante,
3) la commande "cut" utilise /dev/stdin pour faire le job.

Mais "cut" est tout à fait capable de lire un fichier autre que /dev/s tdin.

Donc, l'exemple précédent est équivalent à :

<cut -d/ -f1,6 /etc/oratab>

Tout ceci est valable pour des commandes comme awk, grep, wc, ...


de rien ...



de rien non plus.

:-)


Jean-Marc
--Signature=_Thu__3_Dec_2015_11_54_06_+0100_ucIw8W+YLwWOCVse
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQIcBAEBCAAGBQJWYB9bAAoJEEBxy1wt6cT8f/wP/jO+ZNqtPnD6RG/QV165UYs+
8mg9NkZBvCpggqa2yCCeqgI69Xgf31aRVvF1fpuOr2lqHhzuiIx9t5LJasPT3TYf
45tVmMqxb7rQCk7HhTkhiQftb5slZ1J92Q0VRoV7TAW7VdobHrEhwBl4BE7kfiKy
+JhDSVHUNebUwL0KKujM7UWn7mC0xRzM0CSjJfFsF4M3Z5lwy7VUPkAhOEhiiXYh
O3fPnArAerz+QZEQAKVxj++2D7O765MtCu958gBXCZq+73OhXoP9gcFDVcaQhJbY
pQH0NzEg1B6EqKiSE6baolB+qlbQrAO8l59xut12YraGANjPF+I2lgHvR50JCAhp
KqPHe9JOqBPm7FS5OaSnMoMm6eWJOouX+96uJJzr53GDSnF6m0NuQedbRTij5Dw+
GGJfFrYnbkOds92XEqY9LauKrz1Is9GFH5gbdXkYY1xPZEd3V3Vd/rVJINo8D4wm
BP8giGArHpFYLk0DAmHwCWAhnUH3kUfl5mxlVhDZPYrQsNFFJFQHhUjfDXLG8oe1
S1b4hbDQ9h/PfznP1Pi57FzfEImSgG+mO2Q7bd5Adql7n3BzEzNl2jsIkkJAq7q/
iCFS3rQV/c8RvNjhoN7bSLUm1fVkGTE8sUWYcmXLQeHOZSFZwFstYBzWgSbOYBsd
GL/Hwqir2IydB1P0KQxU
=NhYk
-----END PGP SIGNATURE-----

--Signature=_Thu__3_Dec_2015_11_54_06_+0100_ucIw8W+YLwWOCVse--
Charles Plessy
Le #26380319
Le Thu, Dec 03, 2015 at 11:54:06AM +0100, Jean-Marc a écrit :

Il y a une question que je me pose depuis pas mal de temps :
- pourquoi deux commandes et pas une seule ?

> cat /etc/oratab | cut -d/ -f1,6



Bonjour Jean-Marc,

personnellement, je trouve cette syntaxe pratique en ligne de commande,
car elle permet d'insérer et supprimer des étapes facilement. Par
exemple, s'il faut ajouter s/toto/tata/ devant cut, la commande devient:

cat /etc/oratab | set s/toto/tata/ | cut -d/ -f1,6

Dans le cas sans cat on a donc comme point de départ:

cut -d/ -f1,6 /etc/oratab

qui devient

set s/toto/tata/ /etc/oratab | cut -d/ -f1,6

Ça fait plus de texte à bouger, surtout si on change d'avis.

De même, pour éditer la commande cut, c'est <flèche en haut> et on y est, alors
que s'il y a le nom de fichier à la fin, il faut encore déplacer le curseur.

Ensuite, dans un script, on peut simplifier et enlever le chat.

Bonne fin de semaine,

--
Charles Plessy
Tsurumi, Kanagawa, Japon
Publicité
Poster une réponse
Anonyme