#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 ..
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 - https://www.maccagnoni.eu - https://www.domotego.com
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)...
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
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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)
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 !
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#9 Le 08/11/2012, à 11:34
- justmmt
Re : Awk encore et toujours lui ..
slt a tous!!!
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....... _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 - https://www.maccagnoni.eu - https://www.domotego.com
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)
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)
Connected \o/
Welcome to sHell. · eval is evil.
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 - https://www.maccagnoni.eu - https://www.domotego.com
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.
Connected \o/
Welcome to sHell. · eval is evil.
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
ça veut sûrement dire que c'est la meilleure solution.
Ah ben vu que c'est la mienne, c'est la meilleure !
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
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
real 0m2.533s => moi avec echo pour afficher le resultat
real 0m1.862s => moi sans echo pour afficher le resultat
real 0m2.979s => sed
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#19 Le 09/11/2012, à 07:54
- tiramiseb
Re : Awk encore et toujours lui ..
Hizoka: je m'incline
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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
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...
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
Dernière modification par Hizoka (Le 09/11/2012, à 20:15)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
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.
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
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)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#25 Le 09/11/2012, à 22:41
- Postmortem
Re : Awk encore et toujours lui ..
awk ... <<< $(id)
???
awk ... < <(id)
!
Ah oui dis donc !
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne