Bonjour
J'ai découvert grace a vous (ici ) la variable $RANDOM pour generer un
entier aleatoire .
Pourriez vous m'aiclerer sur son fonctionnement ?
En effet , en l'appelant j'ai un souci : elle ne fourni que des nombres
assez grands ( > 5000 ) Moi j'aurai besoin que sans trop d'acion elle me
fournisse un nombre compris entre ( comme par hasard ) 0 et 5000
Est ce que ceci est une bonne solution ?
#!/bin/zsh
(( NB = $RANDOM ))
print $NB
print $(( NB % 5000 ))
Ou bien y a t il mieux ?
Merci .
--
Rakotomandimby Mihamina Andrianifaharana
Tel : +33 2 38 76 43 65
http://stko.dyndns.info/site_principal/Members/mihamina
awk va exécuter pour chaque ligne reçue le print rand().
effectivement : (sous zsh)
print toto | awk 'BEGIN{srand()}{print int(rand()*5000)}'
me donne ce que je veux.
le truc c'est que si je lance cette commande plusieurs fois par secondes, elle me genere le meme nombre ... pourquoi donc ? au bout de environ une seconde le nombre obtenu change et c'est le meme nombre pendant environ une seconde et ainsi de suite ....
Il faut mettre un argument a srand (seed). Par exemple la date cen seconde puis 1970 ou le PID courant ou la somme des 2. Etc...
Rakotomandimby wrote:
Vincent Bernat wrote:
awk va exécuter pour chaque ligne reçue le print rand().
effectivement :
(sous zsh)
print toto | awk 'BEGIN{srand()}{print int(rand()*5000)}'
me donne ce que je veux.
le truc c'est que si je lance cette commande plusieurs fois par secondes,
elle me genere le meme nombre ... pourquoi donc ?
au bout de environ une seconde le nombre obtenu change et c'est le meme
nombre pendant environ une seconde et ainsi de suite ....
Il faut mettre un argument a srand (seed). Par exemple la date cen
seconde puis 1970 ou le PID courant ou la somme des 2. Etc...
awk va exécuter pour chaque ligne reçue le print rand().
effectivement : (sous zsh)
print toto | awk 'BEGIN{srand()}{print int(rand()*5000)}'
me donne ce que je veux.
le truc c'est que si je lance cette commande plusieurs fois par secondes, elle me genere le meme nombre ... pourquoi donc ? au bout de environ une seconde le nombre obtenu change et c'est le meme nombre pendant environ une seconde et ainsi de suite ....
Il faut mettre un argument a srand (seed). Par exemple la date cen seconde puis 1970 ou le PID courant ou la somme des 2. Etc...
Stephane Chazelas
Rakotomandimby wrote in message news:c1g01q$lt4$ [...]
print toto | awk 'BEGIN{srand()}{print int(rand()*5000)}'
me donne ce que je veux.
awk 'BEGIN{srand(); print int(rand()*5000)}'
le truc c'est que si je lance cette commande plusieurs fois par secondes, elle me genere le meme nombre ... pourquoi donc ?
Parce que la seed est initialisee avec le UNIX time. D'ailleurs
awk 'BEGIN{print srand()}'
est un moyen d'obtenir ce nombre de secondes depuis 1970-1-1.
Si tu veux une valeur differente a chaque fois, il faut que tu initialises la seed a la main. Genre:
Le mieux etant de faire tout le script en awk ou en perl, il n'y aura pas de probleme alors.
Rakotomandimby
Rakotomandimby wrote:
print toto | awk 'BEGIN{srand()}{print int(rand()*5000)}'
Marche.
Maintenant si je veux pas 5000 exactement mais un truc contenu dans une variable voici ce que je fait et les erreurs affichées : ============================================================================= [] LINES# ; print toto | awk 'BEGIN{srand()}{print int(rand()* ${LINES} )}' awk: cmd. line:1: BEGIN{srand()}{print int(rand()* ${LINES} )} awk: cmd. line:1: ^ syntax error awk: cmd. line:1: fatal: 0 is invalid as number of arguments for int =============================================================================== et si je fais : ============================================================================ []LINES# ; print toto | awk 'BEGIN{srand()}{print int(rand()* LINES )}' 0 ============================================================================ J'ai trouvé la solution :-) comme un grand ( comme vous )
============================================================================ []LINES# ; print $LINES | awk 'BEGIN{srand()}{print int(rand()* $0 )}' 8 ============================================================================ Héhé ... c'est optimisable ou c'est deja tres bien comme ça ?
PS: Desolé pour les lignes de + de 80 char ... je recommencerai pas .
print toto | awk 'BEGIN{srand()}{print int(rand()*5000)}'
Marche.
Maintenant si je veux pas 5000 exactement mais un truc contenu
dans une variable voici ce que je fait et les erreurs affichées :
============================================================================= [localhost@user] LINES# ; print toto | awk 'BEGIN{srand()}{print int(rand()* ${LINES} )}'
awk: cmd. line:1: BEGIN{srand()}{print int(rand()* ${LINES} )}
awk: cmd. line:1: ^ syntax error
awk: cmd. line:1: fatal: 0 is invalid as number of arguments for int
===============================================================================
et si je fais :
============================================================================ [localhost@user]LINES# ; print toto | awk 'BEGIN{srand()}{print int(rand()* LINES )}'
0
============================================================================
J'ai trouvé la solution :-) comme un grand ( comme vous )
============================================================================ [localhost@user]LINES# ; print $LINES | awk 'BEGIN{srand()}{print int(rand()* $0 )}'
8
============================================================================
Héhé ... c'est optimisable ou c'est deja tres bien comme ça ?
PS: Desolé pour les lignes de + de 80 char ... je recommencerai pas .
print toto | awk 'BEGIN{srand()}{print int(rand()*5000)}'
Marche.
Maintenant si je veux pas 5000 exactement mais un truc contenu dans une variable voici ce que je fait et les erreurs affichées : ============================================================================= [] LINES# ; print toto | awk 'BEGIN{srand()}{print int(rand()* ${LINES} )}' awk: cmd. line:1: BEGIN{srand()}{print int(rand()* ${LINES} )} awk: cmd. line:1: ^ syntax error awk: cmd. line:1: fatal: 0 is invalid as number of arguments for int =============================================================================== et si je fais : ============================================================================ []LINES# ; print toto | awk 'BEGIN{srand()}{print int(rand()* LINES )}' 0 ============================================================================ J'ai trouvé la solution :-) comme un grand ( comme vous )
============================================================================ []LINES# ; print $LINES | awk 'BEGIN{srand()}{print int(rand()* $0 )}' 8 ============================================================================ Héhé ... c'est optimisable ou c'est deja tres bien comme ça ?
PS: Desolé pour les lignes de + de 80 char ... je recommencerai pas .
qui initialisera le generateur aleatoire avec le pid de awk qui change a chaque appel :-)
J'aime Unix :-))
PS: pas top d'utiliser la variables LINES qui sert a certaines applis comme nbr de ligne dans le terminal/fenetre :-)
Rakotomandimby
JustMe wrote:
J'aime Unix :-))
C'est incroyable hein ? moi aussi :-) Le genre de chose que je peux faire maintenant est tout simplement unbelievable . J'ai des potes fervents defenseurs de Windows mais franchement j'ai aucun complexe a me faire face a eux ... ils savent comment tripatouiller leur systeme, mais moi je sais comment tripatouiller le mien :-) -- Rakotomandimby Mihamina Andrianifaharana Tel : +33 2 38 76 43 65 http://stko.dyndns.info/site_principal/Members/mihamina
JustMe wrote:
J'aime Unix :-))
C'est incroyable hein ? moi aussi :-)
Le genre de chose que je peux faire maintenant est tout simplement
unbelievable .
J'ai des potes fervents defenseurs de Windows mais franchement j'ai aucun
complexe a me faire face a eux ... ils savent comment tripatouiller leur
systeme, mais moi je sais comment tripatouiller le mien :-)
--
Rakotomandimby Mihamina Andrianifaharana
Tel : +33 2 38 76 43 65
http://stko.dyndns.info/site_principal/Members/mihamina
C'est incroyable hein ? moi aussi :-) Le genre de chose que je peux faire maintenant est tout simplement unbelievable . J'ai des potes fervents defenseurs de Windows mais franchement j'ai aucun complexe a me faire face a eux ... ils savent comment tripatouiller leur systeme, mais moi je sais comment tripatouiller le mien :-) -- Rakotomandimby Mihamina Andrianifaharana Tel : +33 2 38 76 43 65 http://stko.dyndns.info/site_principal/Members/mihamina
Rakotomandimby
Donc grace a nous tous , j'ai ficellé mon travail Voici la version finale du script que j'ai ecrit avec notre aide .
(Les questions sur la randomization de fichier et sur RANDOM etaient pour ce truc la )
http://stko.dyndns.info/playlist-2.2
la premiere version opérationnelle etait tres moche mais la voici