Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

#1 Le 07/11/2012, à 10:12

Bat_Tuc

Awk encore et toujours lui ..

Hello tout le monde
besoin d'un petit conseil ..
j'aio besoin de filtrer ma commande id afin de n'avoir que mes groupes et leur identifiant numérique un par ligne
voila ce que j'ai fais

id | sed -e ' s/^.*groupes=\(.$\)/\1/' | awk -F "," for(i=0;i<$NF;i++) printf"%s \n" $i;

j'ai un fuc**** bug de syntaxe visiblement
need help

merci d'avance


Un jour mon père m' a dit " fils, si ton programme tourne, c est qu il peut faire mieux ..."

Hors ligne

#2 Le 07/11/2012, à 10:57

pingouinux

Re : Awk encore et toujours lui ..

Bonjour,
La 1ère marche chez moi (version en anglais)

id | sed -e ' s/^.*groups=\(.*$\)/\1/' | awk -F "," '{for(i=1;i<=NF;i++) printf("%s \n",$i)}'

sinon

id | sed -e ' s/^.*groupes=\(.*$\)/\1/' | awk -F "," '{for(i=1;i<=NF;i++) printf("%s \n",$i)}'

Ajouté :
Ou plus simple

id | sed 's/^.*=//' | awk -F, '{for(i=1;i<=NF;i++) printf("%s \n",$i)}'

Dernière modification par pingouinux (Le 07/11/2012, à 11:18)

Hors ligne

#3 Le 07/11/2012, à 11:15

Bat_Tuc

Re : Awk encore et toujours lui ..

pingouinux a écrit :
id | sed 's/^.*=//' | awk -F, '{for(i=1;i<=NF;i++) printf("%s \n",$i)'}

il manquait le dernier ' mais perfect Thx u


Un jour mon père m' a dit " fils, si ton programme tourne, c est qu il peut faire mieux ..."

Hors ligne

#4 Le 07/11/2012, à 11:44

tiramiseb

Re : Awk encore et toujours lui ..

Salut,

Plutôt que faire une boucle avec awk, il y a peut-être plus simple...

id | sed 's/.*=//;s/,/\n/g'

Dernière modification par tiramiseb (Le 07/11/2012, à 11:45)


Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXème siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

Hors ligne

#5 Le 08/11/2012, à 10:37

Postmortem

Re : Awk encore et toujours lui ..

Salut,
Après la version avec un seul sed de tiramiseb, version un seul awk sans boucle :

id | awk -F , '{ OFS="\n"; sub(/.*groupes=/,""); $1=$1; print }'

Je ne sais pas trop si le $1=$1 est nécessaire sur votre version de awk mais sur la mienne (GNU Awk 3.1.5) il le faut, sinon l'affichage reste xxx(nom_groupe1),yyy(nom_groupe2)...


Trusty Tahr (64 bits), Athlon64 3800+, ATI Radeon HD4870

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#6 Le 08/11/2012, à 10:42

tiramiseb

Re : Awk encore et toujours lui ..

Y'a quand même une des commandes qui est plus simple que les autres big_smile


Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXème siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

Hors ligne

#7 Le 08/11/2012, à 10:57

Postmortem

Re : Awk encore et toujours lui ..

C'est sûr !!
Mais le titre du sujet étant "Awk encore et toujours lui ..", me suis dit que Bat_Tuc serait intéressé.

Edit :
Et comme me disait souvent un collègue, pourquoi faire simple alors qu'on peut faire inextricable !!!

Dernière modification par Postmortem (Le 08/11/2012, à 10:57)


Trusty Tahr (64 bits), Athlon64 3800+, ATI Radeon HD4870

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#8 Le 08/11/2012, à 10:59

tiramiseb

Re : Awk encore et toujours lui ..

Dans ce cas-là, faisons une boucle en bash avec des if caractère par caractère ! lol


Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXème siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

Hors ligne

#9 Le 08/11/2012, à 11:34

justmmt

Re : Awk encore et toujours lui ..

slt a tous!!! smile

c bete mais. ..... comment faites-vous pour faire un texte avec le fond d'ecran noir dans ce forum. comme celle que tiramiseb, pingouinux viennent de faire. j'ai deja testee dans les boutons au-dessus mais rien ne le fait....... yikes_0:

Hors ligne

#10 Le 08/11/2012, à 11:38

tiramiseb

Re : Awk encore et toujours lui ..

Avec le bouton "< >", ça génère des balises "[ code ][ / code ]"


Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXème siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

Hors ligne

#11 Le 08/11/2012, à 11:57

justmmt

Re : Awk encore et toujours lui ..

hahahaha. coool. merci....

Hors ligne

#12 Le 08/11/2012, à 11:59

Postmortem

Re : Awk encore et toujours lui ..

Tu écris ton texte et tu entoures le texte qui doit être sous fond noir avec des balises [ code ] et [ /code ] (sans espace) :

[code]texte sous fond noir[/code]

Edit :
Suis en retard !!

Dernière modification par Postmortem (Le 08/11/2012, à 11:59)


Trusty Tahr (64 bits), Athlon64 3800+, ATI Radeon HD4870

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#13 Le 08/11/2012, à 12:29

Watael

Re : Awk encore et toujours lui ..

salut,

avec awk:

id | awk '{sub(".*=","");gsub(",","\n")}1'

avec sed:

id | sed 's/.*=//;s/,/\n/g'

edit: correction d'une apostrophe manquante

Dernière modification par Watael (Le 08/11/2012, à 13:31)


eval, c'est mal.

Hors ligne

#14 Le 08/11/2012, à 13:12

tiramiseb

Re : Awk encore et toujours lui ..

Sinon, Watael, si tu vas voir ma première réponse (#4), tu y trouveras la même commande sed que ce que tu donnes, mais sans l'erreur de guillemet manquant.


Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXème siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

Hors ligne

#15 Le 08/11/2012, à 13:27

Watael

Re : Awk encore et toujours lui ..

c'est normal, t'as édité ton message après j'ai envoyé le mien ! XD

sérieusement, je n'avais en effet pas fait attention (c'est en regardant la commande awk que j'ai écrite, que j'ai vu cette substitution simple à effectuer avec sed).
mais ça veut sûrement dire que c'est la meilleure solution. wink


eval, c'est mal.

Hors ligne

#16 Le 08/11/2012, à 13:29

tiramiseb

Re : Awk encore et toujours lui ..

c'est normal, t'as édité ton message après j'ai envoyé le mien ! XD

Non, par contre tu as corrigé ton message après ma remarque du coup je passe pour un glandu tongue

ça veut sûrement dire que c'est la meilleure solution.

Ah ben vu que c'est la mienne, c'est la meilleure ! lol


Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXème siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

Hors ligne

#17 Le 09/11/2012, à 04:24

nesthib

Re : Awk encore et toujours lui ..

@Bat_Tuc : si ton problème est résolu, modifie le premier message et ajoute [résolu] au début du titre. Merci.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdnGMT-4

Hors ligne

#18 Le 09/11/2012, à 05:04

Hizoka

Re : Awk encore et toujours lui ..

ou en full bash avec la même démarche que la commande sed donné à 2 reprises.

val=$(id)
val="${val##*=}"
val="${val//,/$'\n'}"

ma version est plus rapide si on l'execute 1000 fois tongue

real    0m2.533s => moi avec echo pour afficher le resultat
real    0m1.862s => moi sans echo pour afficher le resultat
real    0m2.979s => sed

Hors ligne

#19 Le 09/11/2012, à 07:54

tiramiseb

Re : Awk encore et toujours lui ..

Hizoka: je m'incline smile


Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXème siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

Hors ligne

#20 Le 09/11/2012, à 09:33

pingouinux

Re : Awk encore et toujours lui ..

J'ai testé les différentes méthodes proposées pour 1000 itérations, et voici ce que j'obtiens.

Le programme de test

N=1000

echo -e "\npingouinux #2"
n=0;time while ((n++<$N));do
id | sed 's/^.*=//' | awk -F, '{for(i=1;i<=NF;i++) printf("%s\n",$i)}'
done >/tmp/out0

echo -e "\ntiramiseb #4"
n=0;time while ((n++<$N));do
id | sed 's/.*=//;s/,/\n/g'
done >/tmp/out1

echo -e "\nPostmortem #5"
n=0;time while ((n++<$N));do
id | awk -F , '{ OFS="\n"; sub(/.*groups=/,""); $1=$1; print }'
done >/tmp/out2

echo -e "\nWatael #13"
n=0;time while ((n++<$N));do
id | awk '{sub(".*=","");gsub(",","\n")}1'
done >/tmp/out3

echo -e "\nHizoka #18 avec echo"
n=0;time while ((n++<$N));do
val=$(id)
val="${val##*=}"
val="${val//,/$'\n'}"
echo "$val"
done >/tmp/out4

echo -e "\nHizoka #18 sans echo"
n=0;time while ((n++<$N));do
val=$(id)
val="${val##*=}"
val="${val//,/$'\n'}"
done >/tmp/out5

Les résultats

pingouinux #2

real	0m2.898s
user	0m0.056s
sys	0m0.492s

tiramiseb #4

real	0m1.900s
user	0m0.028s
sys	0m0.336s

Postmortem #5

real	0m1.811s
user	0m0.036s
sys	0m0.308s

Watael #13

real	0m1.887s
user	0m0.028s
sys	0m0.328s

Hizoka #18 avec echo

real	0m5.377s
user	0m1.396s
sys	0m3.416s

Hizoka #18 sans echo

real	0m5.353s
user	0m1.424s
sys	0m3.352s

Hors ligne

#21 Le 09/11/2012, à 16:12

Bat_Tuc

Re : Awk encore et toujours lui ..

Content de voir que je suis a l'origini d'un débat smile


Un jour mon père m' a dit " fils, si ton programme tourne, c est qu il peut faire mieux ..."

Hors ligne

#22 Le 09/11/2012, à 20:13

Hizoka

Re : Awk encore et toujours lui ..

5 secondes pour du full bash ?! ca me parait énorme quand même... car moi j'utilise pas de pipe pour le coup...

bash --version a écrit :

GNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu)

time for i in {1..1000}; do a=$(id) a="${a##*=}" a="${a//,/$'\n'}"; done
=> real    0m1.970s

time for i in {1..1000}; do id | sed 's/.*=//;s/,/\n/g'; done
=> real    0m2.938s

time for i in {1..1000}; do a=$(id) a="${a##*=}" a="${a//,/$'\n'}" echo "$a"; done
=> real    0m2.120s

le tout avec des valeur changeant quelque peu à chaque fois.

M'enfin bon, apres ce qui compte c'est que ca marche et que ce soit rapide quand tu ne l'execute qu'une fois tongue

Dernière modification par Hizoka (Le 09/11/2012, à 20:15)

Hors ligne

#23 Le 09/11/2012, à 20:41

Postmortem

Re : Awk encore et toujours lui ..

Salut à tous,
J'ai pas du tout les mêmes résultats que pingouinux et en effet, Hizoka nous explose tous chez moi !
Voilà ce que ça donne chez moi, sachant que j'ai simplifié mon awk comme ceci :

id | awk -F , '{ OFS="\n"; sub(/.*=/,"",$1); print }'
pingouinux #2

real	0m6.564s
user	0m0.156s
sys	0m0.716s

tiramiseb #4

real	0m4.476s
user	0m0.092s
sys	0m0.500s

Postmortem new

real	0m4.781s
user	0m0.136s
sys	0m0.456s

Watael #13

real	0m4.788s
user	0m0.112s
sys	0m0.492s

Hizoka #18 avec echo

real	0m2.890s
user	0m0.260s
sys	0m0.300s

Hizoka #18 sans echo

real	0m2.848s
user	0m0.212s
sys	0m0.292s

On peut aussi voir que mon PC se traîne... Sauf avec le full bash !
Par contre, le full bash sur bcp de données en entrée, je pense qu'il serait à la ramasse, non ??

Et sinon, si je remplace id | awk ... par awk ... <<< $(id), c'est plus long chez moi.


Trusty Tahr (64 bits), Athlon64 3800+, ATI Radeon HD4870

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#24 Le 09/11/2012, à 21:58

Watael

Re : Awk encore et toujours lui ..

awk ... <<< $(id)

???

awk ... < <(id)

!
edit: mais c'est encore plus lent sad
il y a un très lèger mieux en retirant la redirection, mais revient aux temps du here-string.

sed et awk affichent leur résultat, il faut donc ne considérer que la commande d'Hizoka avec `echo'

Dernière modification par Watael (Le 09/11/2012, à 22:06)


eval, c'est mal.

Hors ligne

#25 Le 09/11/2012, à 22:41

Postmortem

Re : Awk encore et toujours lui ..

Watael a écrit :
awk ... <<< $(id)

???

awk ... < <(id)

!

Ah oui dis donc !


Trusty Tahr (64 bits), Athlon64 3800+, ATI Radeon HD4870

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

Haut de page ↑