View previous topic :: View next topic |
Author |
Message |
yuk159 Veteran
Joined: 18 Apr 2003 Posts: 1803 Location: noumea ,nouvelle-caledonie
|
Posted: Sun Aug 20, 2006 9:17 am Post subject: [BashScript] Comment obtenir un script réellement aléatoir |
|
|
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.
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
* _________________ 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 |
|
|
sireyessire Advocate
Joined: 20 Mar 2003 Posts: 2991 Location: back in Paris, France
|
Posted: Sun Aug 20, 2006 1:15 pm Post subject: Re: [BashScript] Comment obtenir un script réellement aléa |
|
|
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.
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
* |
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
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 ) _________________ I never think of the future. It comes soon enough.
Albert Einstein
Try simpler first
Shockley |
|
Back to top |
|
|
yuk159 Veteran
Joined: 18 Apr 2003 Posts: 1803 Location: noumea ,nouvelle-caledonie
|
Posted: Sun Aug 20, 2006 9:03 pm Post subject: |
|
|
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 .
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 |
|
|
man in the hill Veteran
Joined: 15 Dec 2005 Posts: 1552 Location: Madinina
|
Posted: Sun Aug 20, 2006 9:29 pm Post subject: |
|
|
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 |
|
|
yuk159 Veteran
Joined: 18 Apr 2003 Posts: 1803 Location: noumea ,nouvelle-caledonie
|
Posted: Sun Aug 20, 2006 9:39 pm Post subject: |
|
|
Merci _________________ The box said: "Requires Windows 98/2000/XP/NT, or better."
So, I installed LINUX!
Instagram |
|
Back to top |
|
|
loopx Advocate
Joined: 01 Apr 2005 Posts: 2787 Location: Belgium / Liège
|
Posted: Sun Aug 20, 2006 11:28 pm Post subject: |
|
|
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 , un peu comme un prog en C _________________ Mon MediaWiki perso : http://pix-mania.dyndns.org |
|
Back to top |
|
|
Darkael Veteran
Joined: 10 Aug 2004 Posts: 1321 Location: France
|
Posted: Mon Aug 21, 2006 12:48 am Post subject: |
|
|
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 |
|
Back to top |
|
|
yuk159 Veteran
Joined: 18 Apr 2003 Posts: 1803 Location: noumea ,nouvelle-caledonie
|
Posted: Mon Aug 21, 2006 1:25 am Post subject: |
|
|
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 |
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 |
|
|
Darkael Veteran
Joined: 10 Aug 2004 Posts: 1321 Location: France
|
Posted: Mon Aug 21, 2006 2:23 am Post subject: |
|
|
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 |
|
|
yuk159 Veteran
Joined: 18 Apr 2003 Posts: 1803 Location: noumea ,nouvelle-caledonie
|
Posted: Mon Aug 21, 2006 2:25 am Post subject: |
|
|
arf... c'est bien la liste qui provoque un truc
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 |
|
|
|
|
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
|
|