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. #81
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 713
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 713
    Par défaut
    oui, c'est un reste d'une version précédente; je l''ai déplacé dans rendreEntier().

  2. #82
    Membre actif
    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
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Le titre dit explicitement en bash et à ma connaissance bc n'est pas du bash
    Bash ou shell c'est pareil

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 713
    Par défaut
    soit, mais jusqu'où ?

    on peut faire un script shell, qui ne sera qu'un wrapper pour un programme codé en C, ou un script python, ou encore, plus près du shell, en (GNU)awk (mais qui est toujours un autre véritable langage)... et qui fera tout le boulot, sans une ligne de shell (à part le shebang ).

  4. #84
    Membre actif
    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
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    tant que j'en suis à proposer des solutions :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #!/bin/bash
     
    fGroups=groupes.txt # tel que défini ici : https://www.developpez.net/forums/d2135755/systemes/linux/shell-commandes-gnu/extraire-moyenne-bash/#post11861435
     
    evalMoyN() {
        bc -l <<eot
    define abs(digit){
        if (digit<0) return -digit;
        return digit
    }
        abs($1-$2) < abs(${3:-0}-$2)
    eot
    }
     
    #calcul des totaux
    declare -ai nb
    while read gr vl fr
    do
        [[ $gr != '#'* && $gr != '' ]] && {
            vl=${vl//,/.}
            nb[$gr]+=1
            groups[$gr]=$(bc -l <<<"${groups[gr]:-0}+$vl")
        }
    done <"$fGroups" 
     
    # calcul des moyennes
    for gr in ${!groups[@]}
    do
        moyN[$gr]=$(bc -l <<< "scale=2;${groups[gr]}/${nb[gr]}")
    done
     
    #calcul de la valeur la plus proche de la moyenne
    while read gr vl fr
    do
        [[ $gr != '#'* && $gr != '' ]] && {
            vl=${vl//,/.}
     
            (( $(evalMoyN $vl ${moyN[gr]} ${k[gr]}) )) && {
                k[$gr]="$vl"
                K[$gr]="$gr $vl(/${moyN[gr]}) $fr"
            }
        }
    done <"$fGroups"
     
    #affichage des résultats
    printf '%s\n' "${K[@]}"
    Merci beaucoup ! , mais que signifie "<<<" ou "< <"



    Citation Envoyé par Sve@r Voir le message

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
    cherche() {
    	awk -v g=$1 'BEGIN {n=0} {if ($1 != g) next; v[n]=$2; f[n]=$3; n++} END {m=0; for (i=0; i < n; i++) m+=v[i]; c=m; m/=n; for (i=0; i < n; i++) {d=v[i]-m; if (d<0) d=-d; if (d < c) {c=d; r=f[i]}}; print r}'
    }
     
    for g in "$@"; do
    	grep "^[^#]" "fic" |cherche $g
    done



    Résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ~$ ./x.sh 1
    Orange
    ~$ ./x.sh 2
    Pomme

    L'idée était d'avoir tout dans un fichier de sorti, au cas où il y aurait 134 groupes.

    Merci beaucoup

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 713
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ man -LC -P 'less -p "^\s+Here\s"' bash
    reflexe!?

  6. #86
    Membre actif
    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
    Par défaut
    Okkk, mais des fois y a "<<" et "< <", comme si l'espace il voulait dire quelque chose

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 713
    Par défaut
    parce ce n'est pas < <, mais <(...) (une Substitution de processus) précédée par < (une Redirection).

  8. #88
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 299
    Par défaut
    L'extrait complet est celui-ci :
    Tu n'a pas le droit de découper <( car c'est le début d'une substitution de processus. À ne pas confondre avec la substitution de commande $( ). La substitution de processus permet de considérer le résultat d'une commande comme un fichier. Tu comprends donc que l'on redirige en entrée un fichier créé à la volée par la substitution de processus (une commande).

  9. #89
    Membre actif
    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
    Par défaut
    Oui c'est bien < <(...)

+ Répondre à la discussion
Cette discussion est résolue.
Page 5 sur 5 PremièrePremière 12345

Discussions similaires

  1. Extraire un argument parmis plusieurs en bash
    Par syl1405 dans le forum Linux
    Réponses: 13
    Dernier message: 20/07/2010, 13h28
  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, 23h47
  3. [BASH] extraire une chaine d'une autre
    Par zevince dans le forum Linux
    Réponses: 4
    Dernier message: 05/03/2009, 13h00
  4. Réponses: 1
    Dernier message: 11/01/2009, 12h34
  5. Extraire des lignes d'un fichier en commande bash
    Par newnew dans le forum Linux
    Réponses: 3
    Dernier message: 27/07/2004, 17h22

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