Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[BashScript] Comment obtenir un script réellement aléatoire?
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
yuk159
Veteran
Veteran


Joined: 18 Apr 2003
Posts: 1803
Location: noumea ,nouvelle-caledonie

PostPosted: Sun Aug 20, 2006 9:17 am    Post subject: [BashScript] Comment obtenir un script réellement aléatoir Reply with quote

Bonjour :)

Voilà mon problème je veux faire un script bash qui va piocher des mots dans un fichier, qui en comporte à peut-près 240, et qu'il m'en sort un de façon aléatoire.
Ça ne doit pas ètre bien sorcier mais comme je fais du bash à chaque fois qu'il me pousse un dent, je cale. :lol:
Au départ j'ai fait un truc du genre :
Code:

NUM=`cat list |wc -w`
RAND=`echo $((RANDOM%$NUM+1))`
OBJ1=`cat list |head -n $RAND |tail -n 1`
echo $OBJ1

Le problème c'est qu'au delà du fait que cela ne soit pas beau, c'est complétement inéfficace (le dernier mot ressort très souvent).
Alors j'ai décidé de tout reprendre avec ce guide, exemple 9.26 : http://abs.traduc.org/abs-4.0-fr/ch09s06.html
Le truc c'est que ça fonctionne bien au niveau aléatoir, mais que mes "mots" sont en fait plusieur mots sur une ligne, exemple :
Code:
Un homme
Une femme chabadabada  chabadabada*
Un chien
...

et il me sort donc "Un" tout seul et une autre fois "homme", donc pas top.

Ouf... j'espère que certains lisent encore ;)
Voilà ma question, comment puis-je faire pour que le script condidère une ligne comme un mot et qui me le sorte de façon aléatoire en piochant dans ma liste.

Merci d'avance



* :mrgreen:
_________________
The box said: "Requires Windows 98/2000/XP/NT, or better."
So, I installed LINUX!
Instagram


Last edited by yuk159 on Mon Aug 21, 2006 2:34 am; edited 1 time in total
Back to top
View user's profile Send private message
sireyessire
Advocate
Advocate


Joined: 20 Mar 2003
Posts: 2991
Location: back in Paris, France

PostPosted: Sun Aug 20, 2006 1:15 pm    Post subject: Re: [BashScript] Comment obtenir un script réellement aléa Reply with quote

yuk159 wrote:
Bonjour :)

Voilà mon problème je veux faire un script bash qui va piocher des mots dans un fichier, qui en comporte à peut-près 240, et qu'il m'en sort un de façon aléatoire.
Ça ne doit pas ètre bien sorcier mais comme je fais du bash à chaque fois qu'il me pousse un dent, je cale. :lol:
Au départ j'ai fait un truc du genre :
Code:

NUM=`cat list |wc -w`
RAND=`echo $((RANDOM%$NUM+1))`
OBJ1=`cat /tmp/list |head -n $RAND |tail -n 1`
echo $OBJ1

Le problème c'est qu'au delà du fait que cela ne soit pas beau, c'est complétement inéfficace (le dernier mot ressort très souvent).
Alors j'ai décidé de tout reprendre avec ce guide, exemple 9.26 : http://abs.traduc.org/abs-4.0-fr/ch09s06.html
Le truc c'est que ça fonctionne bien au niveau aléatoir, mais que mes "mots" sont en fait plusieur mots sur une ligne, exemple :
Code:
Un homme
Une femme chabadabada  chabadabada*
Un chien
...

et il me sort donc "Un" tout seul et une autre fois "homme", donc pas top.

Ouf... j'espère que certains lisent encore ;)
Voilà ma question, comment puis-je faire pour que le script condidère une ligne comme un mot et qui me le sorte de façon aléatoire en piochant dans ma liste.

Merci d'avance



* :mrgreen:

en fait tu voudrais qu'il te sorte une ligne aléatoirement non? et non pas un mot dans le tas pris au hasard.
si c'est le cas je pense que ton premier truc te renvoit toujours la dernière ligne parce que tu lui donnes le nombre de mots pour le rand et non pas le nombre de lignes :wink:
Code:

NUM=`cat list |wc -l`
RAND=`echo $((RANDOM%$NUM+1))`
OBJ1=`cat /tmp/list |head -n $RAND |tail -n 1`
echo $OBJ1

ça fait ce que tu veux? (mais c'est toujours aussi crade)

sinon pourquoi le bash? je suis pas certain que ça soit le langage le plus adapté pour cela, j'aurai pensé à du ruby ou du perl, non? mais c'est un autre problème (perso j'aurais voté pour du C mais je suis un peu bizarre :mrgreen:)
_________________
I never think of the future. It comes soon enough.
Albert Einstein

Try simpler first
Shockley
Back to top
View user's profile Send private message
yuk159
Veteran
Veteran


Joined: 18 Apr 2003
Posts: 1803
Location: noumea ,nouvelle-caledonie

PostPosted: Sun Aug 20, 2006 9:03 pm    Post subject: Reply with quote

Salut sireyessire,

sireyessire wrote:
en fait tu voudrais qu'il te sorte une ligne aléatoirement non?

merci pour ta réponse, oui c'est ça, en fait j'étais aussi revenu finalement à cette première version.
Mais ça ne fonctionne toujours pas, il vient de me resortir 6 fois de suite la dernière ligne :(
Ça ne me dérange pas que lligne revienne souvent mais ce que je voudrais éviter c'est que ce soit consécutif.

sireyessire wrote:
sinon pourquoi le bash?

c'est que c'est le seule language de script que je connais à peu près :lol:.
Je vais essayé de regardé comment je peux faire avec un autre language, je laisse ce thread ouvert, si vous avez des idées elles sont les bienvenues.

Merci
@+
_________________
The box said: "Requires Windows 98/2000/XP/NT, or better."
So, I installed LINUX!
Instagram
Back to top
View user's profile Send private message
man in the hill
Veteran
Veteran


Joined: 15 Dec 2005
Posts: 1552
Location: Madinina

PostPosted: Sun Aug 20, 2006 9:29 pm    Post subject: Reply with quote

yuk159 wrote:
Je vais essayé de regardé comment je peux faire avec un autre language


J'apprends ruby en ce moment et j'ai rassembler tout un tas de liens :
http://www.guidelinux.org/phpBB/viewtopic.php?t=604


@ +
_________________
Get Up and Go !
Back to top
View user's profile Send private message
yuk159
Veteran
Veteran


Joined: 18 Apr 2003
Posts: 1803
Location: noumea ,nouvelle-caledonie

PostPosted: Sun Aug 20, 2006 9:39 pm    Post subject: Reply with quote

man in the hill wrote:
J'apprends ruby en ce moment et j'ai rassembler tout un tas de liens :
http://www.guidelinux.org/phpBB/viewtopic.php?t=604


Merci :)
_________________
The box said: "Requires Windows 98/2000/XP/NT, or better."
So, I installed LINUX!
Instagram
Back to top
View user's profile Send private message
loopx
Advocate
Advocate


Joined: 01 Apr 2005
Posts: 2787
Location: Belgium / Liège

PostPosted: Sun Aug 20, 2006 11:28 pm    Post subject: Reply with quote

J'ai pas tout lu, je suis pas un bash scripteur, mais ne peut ton pas générer un nombre avec /dev/urandom et ensuite, trouver le reste de la division de ce nombre avec 240, puis aller à la ligne du resultat trouvé précédement :D, un peu comme un prog en C ;)
_________________
Mon MediaWiki perso : http://pix-mania.dyndns.org
Back to top
View user's profile Send private message
Darkael
Veteran
Veteran


Joined: 10 Aug 2004
Posts: 1321
Location: France

PostPosted: Mon Aug 21, 2006 12:48 am    Post subject: Reply with quote

yuk159 wrote:
Salut sireyessire,

sireyessire wrote:
en fait tu voudrais qu'il te sorte une ligne aléatoirement non?

merci pour ta réponse, oui c'est ça, en fait j'étais aussi revenu finalement à cette première version.
Mais ça ne fonctionne toujours pas, il vient de me resortir 6 fois de suite la dernière ligne :(
Ça ne me dérange pas que lligne revienne souvent mais ce que je voudrais éviter c'est que ce soit consécutif.

As-tu bien lu le post de siryessire? Tu dois mettre wc -l au lieu de wc -w, et là il n'y a aucune raison que ça privilégie une ligne, sauf si t'as vraiment pas de chance :D
Back to top
View user's profile Send private message
yuk159
Veteran
Veteran


Joined: 18 Apr 2003
Posts: 1803
Location: noumea ,nouvelle-caledonie

PostPosted: Mon Aug 21, 2006 1:25 am    Post subject: Reply with quote

KarnEvil wrote:
yuk159 wrote:
Salut sireyessire,

sireyessire wrote:
en fait tu voudrais qu'il te sorte une ligne aléatoirement non?

merci pour ta réponse, oui c'est ça, en fait j'étais aussi revenu finalement à cette première version.
Mais ça ne fonctionne toujours pas, il vient de me resortir 6 fois de suite la dernière ligne :(
Ça ne me dérange pas que lligne revienne souvent mais ce que je voudrais éviter c'est que ce soit consécutif.

As-tu bien lu le post de siryessire? Tu dois mettre wc -l au lieu de wc -w, et là il n'y a aucune raison que ça privilégie une ligne, sauf si t'as vraiment pas de chance :D


oui oui, j'avais bien vu la différence, mais malheureusement il fait toujours la mème chose.
Je ne comprend pas ce qui cloche, mais ya bien un problème, puisque c'est bien toujours la mème ligne qui reviens (la dernière), que ce soit avec mon premier essai ou la modif de sireyessire.
Je vais essayer de recomposer le fichier "list", pour voir si c'est ça qui cloche (un caractère qu'il aurai pas aimé ou un truc du genre)
_________________
The box said: "Requires Windows 98/2000/XP/NT, or better."
So, I installed LINUX!
Instagram
Back to top
View user's profile Send private message
Darkael
Veteran
Veteran


Joined: 10 Aug 2004
Posts: 1321
Location: France

PostPosted: Mon Aug 21, 2006 2:23 am    Post subject: Reply with quote

Je viens de remarquer que tu utilisais "list" dans la première ligne, puis "/tmp/list" ensuite. Est-ce que ça désigne bien le même fichier?

Et au passage tu n'as pas besoin des "cat", mais c'est juste un détail...
Back to top
View user's profile Send private message
yuk159
Veteran
Veteran


Joined: 18 Apr 2003
Posts: 1803
Location: noumea ,nouvelle-caledonie

PostPosted: Mon Aug 21, 2006 2:25 am    Post subject: Reply with quote

arf... c'est bien la liste qui provoque un truc :( :roll:
Apparement quand j'ai une ligne vide en fin de fichier ça ne me le fait plus :?
Je vais regarder ce que je peux faire avec ça.

[EDIT]
KarnEvil wrote:
Je viens de remarquer que tu utilisais "list" dans la première ligne, puis "/tmp/list" ensuite. Est-ce que ça désigne bien le même fichier?

Oui c'est une erreur au moment de la copie car dans l'original je liste dans /tmp, je corrige ça

KarnEvil wrote:
Et au passage tu n'as pas besoin des "cat", mais c'est juste un détail...

Merci je regarde ça aussi
_________________
The box said: "Requires Windows 98/2000/XP/NT, or better."
So, I installed LINUX!
Instagram
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum