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 :

Extraire la moyenne en bash


Sujet :

Shell et commandes GNU

  1. #41
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 102
    Points : 4 448
    Points
    4 448
    Par défaut
    Citation Envoyé par Dorhub Voir le message
    Sauriez-vous comment
    C'est pour un sondage ?
    Oui, que maintenant Flodelarab a donné la solution pour calculer la moyenne

    ------
    EDIT: déjà la page N° 3 et j'ai pas encore vu la moindre once de code
    $moi= ( !== ) ? : ;

  2. #42
    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 458
    Points
    13 458
    Par défaut
    Citation Envoyé par Dorhub Voir le message
    J'ai simplifié l'énoncer, je travaille avec des nombres à virgule avec 3 décimales -_-.
    Tu n'as pas répondu. Tu as répété la question. Choisit-on orange, prune, ou citron, dans l'exemple de disedorgue ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #43
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2022
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2022
    Messages : 46
    Points : 1
    Points
    1
    Par défaut
    Si y a égalité, on prend le premier de la liste du groupe.

  4. #44
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2022
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2022
    Messages : 46
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Tu n'as pas répondu. Tu as répété la question. Choisit-on orange, prune, ou citron, dans l'exemple de disedorgue ?
    Du coup as tu une proposition ?

  5. #45
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Dorhub Voir le message
    Citation Envoyé par Dorhub Voir le message
    Merci je vais décortiquer tout cela...
    Du coup as tu une proposition ?
    Ca ressemble vachement à un mec qui attend qu'on lui code sa solution. Donc oui, j'ai une proposition. Je propose que tu décortiques ce qu'on t'a dit (comme tu l'as annoncé récemment). Puis ensuite je propose que tu nous montres ton code (un code qui donne le bon résultat évidemment, ou au pire qui ne donne pas forcément le bon résultat mais qui montre au-moins que tu sais récupérer l'info qui va bien de ta ligne de fruits et la soustraire à la moyenne précédemment calculée). Et là enfin on te proposera des possibilités de correction/optimisation/simplification.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #46
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2022
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2022
    Messages : 46
    Points : 1
    Points
    1
    Par défaut
    Bonjour , voici
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    #moyennes.txt
    #1 7.8
    #2 4.75
     
    #!/bin/bash
    grep '1  ' groupe.txt > temp2
    awk '{ print $2 } ' temp2 > temp3
     
    #temp3
    # 1  8  Orange
    # 1  6.5  Banane
    # 1  6.2  Pomme 
    # 1  12  Abricot
    # 1  7  Mure 
     
    a=($(cat temp3 ))
    b=($(cat moyennes.txt ))
     
    minim=$(expr ${a[0]} - ${b[1]}) # comparaison de la première différence avec la moyenne
     
    for i in $a; do # pour chaque valeur de la liste
     
    	if [ i - "${b[1]}" <= $minim ]; then # si la différence de i avec la moyenne est inférieur à la première différence alors minim devient le difference testée
    		$minim=i
    	fi	
    	echo $i
     
    done

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    non.

    pas grep puis awk, surtout sur des fichiers temporaires.
    expr est une programme externe inutile en bash.
    on ne fait pas une boucle for sur le contenu d'un fichier; un fichier se lit avec une boucle while.
    pour mettre le contenu d'un fichier dans un tableau, il y a mapfile (aka readarray).

    tu n'as évidemment pas testé ton script
    $a n'est pas le contenu du tableau, ce n'en est que le premier élément, équivalent à "${a[0]}",
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ i - "${b[1]}" <= $minim ]
    ne peut pas fonctionner :
    - il n'y a pas de contexte arithmétique, donc valX - valY ne donnera pas le résultat espéré,
    - i ne sera pas développé come pourrait l'être $i,
    - <= n'est pas une opérateur arithmétique,
    - pourquoi uniquement ${b[1]} ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #48
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Dorhub Voir le message
    voici
    Bon, au moins c'est un code. Mais il n'y a pas grand chose à en tirer. Mais j'admets que c'est de ma faute, j'ai demandé un code, pas un code qui fonctionne (petit détail qui fait toute la différence).
    Tu ne voudrais pas d'abord apprendre le bash? Je t'assure, pour programmer en bash ce serait un plus...

    Déjà les fichiers temporaires sont rarement nécessaires. Mais s'ils le sont, on les met dans "/tmp" qui est justement "le" répertoire qui leur est dédié. Ca évite d'en foutre de partout. Mais ça c'était juste le peanut par rapport au gros de ce programme.

    Prenons par exemple a=($(cat temp3 )). Que contient "a"? Le résultat d'une commande, ici cat temp3. Donc visiblement tu sais mettre une commande dans une variable.
    Et que contient "temp3"? Lui aussi une commande, ici awk '{ print $2 } ' temp2 >temp3. Tu aurais pu donc la mettre directement dans "a".
    Et que contient "temp2"? Lui aussi une commande, ici grep '1 ' groupe.txt >temp2. Tu le sens où je veux en venir?
    Et vu que "temp2" n'est pas réutilisé, il peut disparaitre. "temp3" peut donc s'écrire grep '1 ' groupe.txt |awk '{ print $2 } ' >temp3.
    Mais vu que "temp3" sert uniquement à remplir "a", lui aussi il peut disparaitre. Et "a" devient alors a=($(grep '1 ' groupes.txt |awk '{ print $2 }')). Et si tu apprends le langage "awk" (ok, un autre langage à apprendre mais c'est inévitable) alors tu peux lui insérer l'instruction qui remplace le grep. Remarque vu qu'elle n'est pas évidente à retenir si tu laisses le grep je n'en ferai pas une maladie. S'il n'y avait que ça qui n'allait pas dans ton script...

    Pour le reste... for i in $a s'écrira plutôt for i in ${a[@]} (ben oui, tu as créé un tableau, maintenant il faut t'en servir). Puisque tu sais qu'une variable s'obtient en lui mettant "$" devant on se demande pourquoi tu ne le fais pas pour "i" quand tu calcules la différence ; qu'un calcul étant une expression ben il doit s'écrire dans la syntaxe des expressions ; qu'on ne compare pas une inégalité avec "<=" mais "-le" ; et qu'on ne met pas de "$" devant une variable quand on lui affecte une valeur (tu ne l'as pas fait pour "a", on se demande pourquoi tu le fais pour "minim")

    Que veux-tu qu'on fasse? Qu'on te réécrive ici tout un cours de bash? En plus il y a justement un lien vers un tutoriel bash dans ma signature (ok il est un peu vieux et les dernières technologies n'y sont pas mais déjà si tu ne fais que le lire tu auras fait quand-même un immense bon en avant). Sinon t'es pas obligé d'utiliser le mien mais t'es quand-même un petit peu obligé d'en utiliser un quel qu'il soit.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #49
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2022
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2022
    Messages : 46
    Points : 1
    Points
    1
    Par défaut
    Sve@r, si tu ne veux pas m'aider, c'est ok. Mais si c'est pour m'engueuler comme si t'étais mon père, laisses carrément tomber.

    Je fais un effort et on me prette de mauvaises intentions.

    Y a d'autres problèmes sur le forum très certainement plus intéressantes que celui-ci...

  10. #50
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Dorhub Voir le message
    Sve@r, si tu ne veux pas m'aider
    On n'a visiblement pas la même conception du verbe "aider". Parce qu'avec toutes les infos que que je t'ai donné sur comment lire un fichier ligne par ligne, comment extraire une info particulière d'une ligne, comment éviter les fichiers temporaires, l'opérateur à utiliser pour comparer deux nombres, venir dire que je ne veux pas t'aider c'est carrément de la mauvaise foi. Maintenant si pour toi "aider" signifie "te faire ton code" évidemment on ne s'entendra pas (ni avec moi, ni avec personne)

    Citation Envoyé par Dorhub Voir le message
    Mais si c'est pour m'engueuler
    Je t'ai pas engueulé, je t'ai dit de lire un tuto. Tu crois que c'est déshonorant? Tu crois que moi je n'en lis pas chaque fois que je veux apprendre un truc? Tu penses vraiment que la syntaxe shell va monter en toi par capilarité?
    Le reste (mettre parfois dollar quand c'est inutile, ne pas le mettre quand c'est utile) c'était juste te mettre le nez dans tes incohérences. Tu aurais voulu quoi à la place? Que je te dise "ok c'est super" alors que ton programme ne s'exécute même pas tellement il est rempli d'erreurs de syntaxe à chaque ligne??? Je ne suis pas là pour faire du social, mais pour te faire progresser en shell. Je te remercie pour le -1, j'apprécie. Fais du bien à Bertrand, te répond en caguant. Heureusement N_BaH () a rétabli l'équilibre.

    Citation Envoyé par Dorhub Voir le message
    laisses carrément tomber.
    Toi laisse carrément tomber si tu ne veux pas apprendre.

    Citation Envoyé par Dorhub Voir le message
    Je fais un effort
    Justement, c'est là l'erreur; il faut en faire beaucoup. Tu as décortiqué les posts précédents comme tu l'avais annoncé ?
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut

    c'est pas de l'aide ça ?
    Prenons par exemple a=($(cat temp3 )). Que contient "a"? Le résultat d'une commande, ici cat temp3. Donc visiblement tu sais mettre une commande dans une variable.
    Et que contient "temp3"? Lui aussi une commande, ici awk '{ print $2 } ' temp2 >temp3. Tu aurais pu donc la mettre directement dans "a".
    Et que contient "temp2"? Lui aussi une commande, ici grep '1 ' groupe.txt >temp2. Tu le sens où je veux en venir?
    Et vu que "temp2" n'est pas réutilisé, il peut disparaitre. "temp3" peut donc s'écrire grep '1 ' groupe.txt |awk '{ print $2 } ' >temp3.
    Mais vu que "temp3" sert uniquement à remplir "a", lui aussi il peut disparaitre. Et "a" devient alors a=($(grep '1 ' groupes.txt |awk '{ print $2 }')). Et si tu apprends le langage "awk" (ok, un autre langage à apprendre mais c'est inévitable) alors tu peux lui insérer l'instruction qui remplace le grep. Remarque vu qu'elle n'est pas évidente à retenir si tu laisses le grep je n'en ferai pas une maladie. S'il n'y avait que ça qui n'allait pas dans ton script...

    Pour le reste... for i in $a s'écrira plutôt for i in ${a[@]} (ben oui, tu as créé un tableau, maintenant il faut t'en servir). Puisque tu sais qu'une variable s'obtient en lui mettant "$" devant on se demande pourquoi tu ne le fais pas pour "i" quand tu calcules la différence ; qu'un calcul étant une expression ben il doit s'écrire dans la syntaxe des expressions ; qu'on ne compare pas une inégalité avec "<=" mais "-le" ; et qu'on ne met pas de "$" devant une variable quand on lui affecte une valeur (tu ne l'as pas fait pour "a", on se demande pourquoi tu le fais pour "minim")
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  12. #52
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2022
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2022
    Messages : 46
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message

    c'est pas de l'aide ça ?

    Si si et je t'en remercie

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    remercie Sve@r, c'est lui qui l'a écrite.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  14. #54
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2022
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2022
    Messages : 46
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    non.

    - pourquoi uniquement ${b[1]} ?
    J'essaye de comparer la distance à la moyenne de ce groupe

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    mais ${b[@]} ne contient pas de moyennes, simplement les valeurs du groupe 1.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  16. #56
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2022
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2022
    Messages : 46
    Points : 1
    Points
    1
    Par défaut
    ${b[1]} issue de [b=($(cat moyennes.txt )) est la première moyenne.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    ah, oui !

    par contre, moyenne.txt n'est pas explicité dans le script, d'où ma confusion.
    mais le premier élément d'un tabeau n'est pas 1, mais 0.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  18. #58
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2022
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2022
    Messages : 46
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $  END{for (i in n) print i,v[i]*1.0/n[i];}' fruits.txt
    Re ! Du coup pour cette partie, si une moyenne c'est la somme de chaque terme, divisée le nombre de termes, du coup là ce serait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    v[i]*1.0 # la somme de chaque terme
    n[i]; # la somme du nombre de termes
    que signifie cela ?

  19. #59
    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 458
    Points
    13 458
    Par défaut
    Valeur du tableau v pour la clé i, multiplié par 1.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    mais pourquoi ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

Discussions similaires

  1. Extraire un argument parmis plusieurs en bash
    Par syl1405 dans le forum Linux
    Réponses: 13
    Dernier message: 20/07/2010, 12h28
  2. Extraire le dernier mot d'une chaîne en bash
    Par oranoutan dans le forum Linux
    Réponses: 2
    Dernier message: 16/05/2010, 22h47
  3. [BASH] extraire une chaine d'une autre
    Par zevince dans le forum Linux
    Réponses: 4
    Dernier message: 05/03/2009, 12h00
  4. Réponses: 1
    Dernier message: 11/01/2009, 11h34
  5. Extraire des lignes d'un fichier en commande bash
    Par newnew dans le forum Linux
    Réponses: 3
    Dernier message: 27/07/2004, 16h22

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