Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[HS] extraire deux colonnes

5 réponses
Avatar
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.

=C3=A7a se presente comme =C3=A7a :

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=C3=A9sultat :

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

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

Si vous avez une id=C3=A9e de ce que doit modifier =C3=A0 cette commande :

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

j'arrive =C3=A0 isoler le nom mais pas =C3=A0 afficher les version


--=20
david martin

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

<div dir=3D"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>=C3=A7a se prese=
nte comme =C3=A7a :</div><div><br></div><div><div>COMPTA:/u01/app/oracle/pr=
oduct/<a href=3D"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=3D"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=3D"=
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=3D"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=3D"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=3D"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=3D"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=3D"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=C3=A9sultat :</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 =C3=A7a 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=C3=A9e de ce que doit modifier =C3=A0 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 =C3=A0 isoler=
le nom mais pas =C3=A0 afficher les version</div><div><br></div><div><br><=
/div>-- <br><div class=3D"gmail_signature"><div dir=3D"ltr">david martin<di=
v><br></div></div></div>
</div></div>

--001a114013b6f81d4d0525fae65c--

5 réponses

Avatar
Sylvain L. Sauvage
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
Avatar
David Martin
--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 fr> a
é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 dir="ltr">Merci beaucoup, je suis vert de la simplicité que c&# 39;était.<div><br></div><div><br></div></div><div class="gmail_extra "><br><div class="gmail_quote">Le 3 décembre 2015 10:24, Orvoine Ber trand <span dir="ltr">&lt;<a href="mailto:" target="_blank"></a>&gt;</span> a écrit :<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-l eft:1px #ccc solid;padding-left:1ex">



<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>pour avoir le nom de mes bases et leur version.</div>
<div><br>
</div>
<div>ça se presente comme ça :</div>
<div><br>
</div>
<div>
<div>COMPTA:/u01/app/oracle/product/<a href="http://11.2.0.3/db home_1:N" target="_blank">11.2.0.3/dbhome_1:N</a></div>
<div>COMPTAB:/u01/app/oracle/product/<a href="http://11.2.0.3/d bhome_1:N" target="_blank">11.2.0.3/dbhome_1:N</a></div>
<div>PROD2:/u01/app/oracle/product/<a href="http://11.2.0.3/dbh ome_1:N" target="_blank">11.2.0.3/dbhome_1:N</a></div>
<div>COOIF:/u01/app/oracle/product/<a href="http://11.2.0.3/dbh ome_1:N" target="_blank">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" target="_blank">11.2.0.3/dbhome_1:N</a></div>
<div>PRGFUIT:/u01/app/oracle/product/<a href="http://11.2.0.3/d bhome_1:N" target="_blank">11.2.0.3/dbhome_1:N</a></div>
<div>DLAMI:/u01/app/oracle/product/<a href="http://10.2.0.5/dbh ome_1:N" target="_blank">10.2.0.5/dbhome_1:N</a></div>
<div>MOTEUR:/u01/app/oracle/product/<a href="http://11.2.0.3/db home_1:N" target="_blank">11.2.0.3/dbhome_1:N</a></div>
<div><br>
</div>
<div><br>
</div>
<div>J&#39; aimerai avoir ce résultat :</div>
<div><br>
</div>
<div>COMPTA : 11.2.0.3</div>
<div>COMPTAB : 11.2.0.3</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>.......</div>
<div><br>
</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 à 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--
Avatar
cedric rousselot
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 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
.......

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
Avatar
Jean-Marc
--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 écrivait :

salut Bertrand, salut à tous,


>
> ça se presente comme ça :
>
> COMPTA:/u01/app/oracle/product/11.2.0.3/dbhome_1:N
> <http://11.2.0.3/dbhome_1:N>
> COMPTAB:/u01/app/oracle/product/11.2.0.3/dbhome_1:N
> <http://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--
Avatar
Charles Plessy
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