IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

[SHELL] RANDOM 1-900000


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 54
    Points : 49
    Points
    49
    Par défaut [SHELL] RANDOM 1-900000
    Bonjour à tous,

    Je souhaiterais executer une fonction random qui me génère un nombre entre 1 et $nbligne qui contient un entier approchant les 400000. Voici mon code actuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #Jeu
    nbligne=`wc -l toto.txt`
    nbligne=${nbligne:0:7}
    echo ""
    echo "nbligne : $nbligne"
    numligne=`tr -dc 1-$nbligne < /dev/urandom |head -c 1`
    if [ -z $numligne ]
         then
              numligne=0
    fi
    echo "numligne 1 : $numligne"
    let numligne ++
    echo "numligne 2 : $numligne"
    echo "FIN"
    echo ""
    Lorsque j'execute ce code, le message d'erreur suivant apparait :
    tr : operande operande manquant apres « 0-323577 »
    Deux chaines doivent être indiquées lors de la conversion.
    Je ne suis pas expert, cette commande random me vient de https://forum.ubuntu-fr.org/viewtopic.php?id=1579091. Mais elle ne fonctionne à première vu que pour les nombres de 0 à 9... Quelqu'un a-t-il une idée ? Quelle operande manque ?

    Merci par avance de votre aide.

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Bonjour

    Tu n'as pas compris la commande que tu as appliquée.

    • /dev/urandom donne des caractères à l'infini
    • Sur cette infinité il finira bien par y avoir des 0 des 5 des 7 etc
    • Donc on filtre les chiffres avec tr.
    • Et on coupe 10 caractères pour avoir un nombre à 10 chiffres.

    Tu croyais sûrement que tu choisissais par ta commande un nombre entre 1 et le nombre de lignes.
    Alors que tu défigurais le filtre des chiffres.


    Voici une proposition d'une autre façon de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '=;d' toto.txt | sort -R | head -1
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo | awk -vnl=$nbligne 'srand() {print int(rand()*nl)+1;}'
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  4. #4
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 54
    Points : 49
    Points
    49
    Par défaut
    Merci à vous de ces réponses rapides et efficaces ! Je choisi la solution de Flodelarab car beaucoup plus rapide à me générer un nombre. Je ne savais pas que "awk" comportait une fonction srand()... Ce mini langage est vraiment puissant ! Encore merci à vous deux !

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    pfiou !
    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    rand=$((RANDOM%nbL+1))
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    J'ai commencé comme toi.
    Mais comme $RANDOM donne des entiers inférieurs à 32768, tu auras du mal à tirer la ligne numéro 123456.
    L'avantage, c'est que tu peux faire sauter le calcul, le modulo, l'incrémentation :-)

    Après, tu peux combiner.
    Mais il faut que tu gardes la distribution uniforme.
    Et là, grosse flemme.
    C'est pour cela que j'ai commencé par "sort".

    Mais bon. Trier 400000 lignes pour en tirer un nombre ... faut pas pousser.
    D'où la commande awk.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    $RANDOM donne des entiers inférieurs à 32768
    non. il n'est pas dit ça rentre un jour. :/
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    pfiou !
    Tu l'as dit !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # rand=$((RANDOM%nbL+1))
    bash: RANDOM%nbL+1 : division par 0 (le symbole erroné est « nbL+1 »)
    #
    Quelle version de Bash ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # bash --version
    GNU bash, version 4.4.12(1)-release (i686-pc-linux-gnu)
    #
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  9. #9
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GNU bash, version 4.4.23(1)-release (x86_64-unknown-linux-gnu)
    mais, il faut assigner nbL !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  10. #10
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GNU bash, version 4.4.23(1)-release (x86_64-unknown-linux-gnu)
    mais, il faut assigner nbL !
    Ah ben vi !

    Faut dire qu'avec ces fortes chaleurs, en fin de journée je n'arrive plus à réfléchir,

    En plus, débarquant dans la discussion je suis tombé sur ton post, j'ai vu la ligne, me suis dit "tiens un code sur une ligne (comme en Perl)" et n'ai pas cherché plus loin, et paf !

    'fectivement, en ayant mis nbL=25 sur la ligne précédente, ta ligne retourne 19, 21, 5, 9, 19, 11, etc.

    'scusez du dérangement,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. random dans boucle shell ne marche pas
    Par molesqualeux dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 02/02/2010, 18h45
  2. [SHELL] Icônes associées à des fichiers
    Par agh dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 09/04/2003, 17h04
  3. [VB6] : pour faire un Randomize sous vb... merci
    Par delnic dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 22/01/2003, 15h49
  4. Random en Assembleur
    Par funx dans le forum Assembleur
    Réponses: 9
    Dernier message: 02/09/2002, 17h05
  5. [Kylix] probleme pour lancer le shell
    Par miky dans le forum EDI
    Réponses: 5
    Dernier message: 13/08/2002, 09h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo