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 valeur la plus basse en bash


Sujet :

Shell et commandes GNU

  1. #1
    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 Extraire la valeur la plus basse en bash
    Bonjour ! !

    Voici une liste

    fichier1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #Groupe Valeur Nom
    1 -30,133 Orange
    1  -6,576 Banane
    1  -6,293 Pomme
    1  -12,034 Abricot
    1  -7,076 Mûre
    2  -4,355 Pomme
    2  -6,517 Banane
    2  -6,355 Abricot
    2  -3,502 Mûre
    Je souhaiterais extraire la valeur la plus basse pour chaque groupe. (groupe 1 : 1 -30,133 : groupe 2 : 2 -6,517 )

    Je voudrais passer par un grep '1 -' (pour capturer le groupe 1 par exemple) puis puis inverser la liste puis un head, mais si j'ai le groupe 11 par exemple ça ne marcherait pas.

    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 551
    Points : 19 385
    Points
    19 385
    Par défaut
    si j'ai le groupe 11 par exemple ça ne marcherait pas.
    pourquoi ?

    il y a plus de chances que grep ne trouve pas toutes lse valeurs du groupe 1 parce que l'une d'elles est une valeur positive, voire toutes !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    1 -30,133 Orange
    1  -6,576 Banane
    1  -6,293 Pomme
    1  -12,034 Abricot
    1  -7,076 Mûre
    11  -4,355 Pomme
    11  -6,517 Banane
    11  -6,355 Abricot
    11  -3,502 Mûre
    Le grep '1 (espace) (espace) ' ne marche plus

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 551
    Points : 19 385
    Points
    19 385
    Par défaut
    si,si, ça marche parfaitement : ça montre bien les lignes qui contiennent un 1 suivi de deux espaces.
    le problème avec 11, c'est qu'il y a un 1 devant !

    il faut indiquer le motif depuis le début de la ligne. man 7 regex
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 279
    Points : 12 727
    Points
    12 727
    Par défaut
    Moi, je me demande si un simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sort -n -k2 fichier | sort -u -k1,1
    ne suffirait pas...
    Cordialement.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 551
    Points : 19 385
    Points
    19 385
    Par défaut
    probablement, mais ce n'est pas du bash, et notre ami insiste pour que ce soit fait en bash !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    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
    De Hizoka de forum ubuntu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while read Num; do
        grep -E "^$Num[[:space:]]+" test.txt | sort -nk2 | head -n 1
    done < <(grep -Eo "^[0-9]+[[:space:]]" test.txt | sort -un)
    # Le grep permet de ressortir chaque liste de groupe
    # Le sort les range et n'en conserve qu'un seul exemplaire

  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 Dorhub Voir le message
    De Hizoka de forum ubuntu
    Source, avec l'url,
    Faut tout leur dire...
    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
    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
    Bonjour

    Pfff. Autant de code pour si peu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ awk '{sub(/,/,".");} (t[$1]==""){t[$1]=$2;next;} ($2<t[$1]){t[$1]=$2;} END{for (i in t) print i,t[i];}' fichier.txt
    #Groupe Valeur                                                                                                         
    1 -30.133
    2 -6.517
    [edit] voire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ awk '{sub(/,/,".");} (t[$1]==""){t[$1]=$2;next;} ($2<t[$1]){t[$1]=$2;} END{for (i in t) {sub(/\./,",",t[i]);print i,t[i];}}' fichier.txt 
    #Groupe Valeur
    1 -30,133
    2 -6,517
    [/edit]
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 551
    Points : 19 385
    Points
    19 385
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    probablement, mais ce n'est pas du bash, et notre ami insiste pour que ce soit fait en bash !
    bis repetita.


    quant à la "solution" d'Hizoka... mon cœur balance entre et
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 279
    Points : 12 727
    Points
    12 727
    Par défaut
    Citation Envoyé par Dorhub Voir le message
    De Hizoka de forum ubuntu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    do
        grep -E "^$Num[[:space:]]+" test.txt | sort -nk2 | head -n 1
    done < <(grep -Eo "^[0-9]+[[:space:]]" test.txt | sort -un)
    # Le grep permet de ressortir chaque liste de groupe
    # Le sort les range et n'en conserve qu'un seul exemplaire
    Citation Envoyé par N_BaH Voir le message
    probablement, mais ce n'est pas du bash, et notre ami insiste pour que ce soit fait en bash !
    Pourtant il nous donne bien une version (beaucoup plus compliquée, donc mieux pour certains ) similaire à ma version, non ?
    Cordialement.

  12. #12
    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 N_BaH Voir le message
    bis repetita.
    On répond pour ouvrir des horizons, pas donner les solutions. Ma réponse awk donne l'algorithme, avec des tableaux associatifs, qui existent en bash, et tout ceci permet donc au courageux premier posteur de faire le code built-in bash, avec élégance, et sans effort.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 551
    Points : 19 385
    Points
    19 385
    Par défaut
    je ne comprends pas ton message.
    ta solution avec sort ne correspond pas à l'énoncé qui demande à ce que ce soit fait en bash, et c'est pareil pour la solution en awk de Flodelarab.

    la "solution" avec grep n'est pas donnée par Dorhub, mais rapportée par ce dernier depuis ubuntu-fr, où elle est proposée par Hizoka, et elle consiste à grepper autant de fois qu'il y a de groupes le même fichiers.
    espérons qu'il n'y a pas beaucoup de groupes, ni beaucoup de lignes...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  14. #14
    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
    Bonjour
    Citation Envoyé par N_BaH Voir le message
    ta solution avec sort ne correspond pas à l'énoncé qui demande à ce que ce soit fait en bash
    C'est un peu difficile vu la nature du bash qui est surtout de faire faire le travail par les autres et récupérer le résultat. Ce n'est pas un reproche (pourquoi en effet réinventer la roue quand elle existe) mais qui peut dire ensuite dans un script "ceci n'est plus du bash"?
    Peut-on qualifier de "non bash" un script qui fait appel à "grep" pour extraire une ligne? Et s'il extrait une info particulière de cette ligne avec "cut"? Et s'il trie avec "sort"?
    Ok "awk" est un peu particulier vu qu'il possède une telle richesse qu'il en devient un langage à part entière donc pour lui la question est encore plus ardue. Mais pour les autres?
    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]

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 551
    Points : 19 385
    Points
    19 385
    Par défaut
    ici, il ne s'agit pas vraiment de trier, mais de retenir la valeur la plus basse. Ça, bash peut le faire "facilement" sans programme externe.

    je distingue bash et le shell.
    on exécute des programmes externes dans le shell.
    on peut programmer des tâche complètes presque entièrement en bash.

    sur usenet, je crois me souvenir, il est dit (à peu près) : "tout ce qui est dans la console n'est pas du bash".

    enfin, s'il est précisé "en bash", c'est qu'il doit y avoir une volonté de développer les compétences algorithmiques.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  16. #16
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 279
    Points : 12 727
    Points
    12 727
    Par défaut
    ok, on fait comment en bash pour renommer ou effacer un fichier ?
    Cordialement.

  17. #17
    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
    Nan steplait, commence pas à provoquer, généralement tes interventions sont au dessus de ça.
    N_BaH a bien expliqué le truc. Dans cet exercice, on peut trouver la valeur la plus basse sans passer par un tri numérique suivi d'un head, en utilisant l'algo classique (récupérer et comparer chaque valeur).
    Evidemment pour faire des actions spécifiques OS fatalement il faudra appeler les commandes dédiées OS
    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]

  18. #18
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 279
    Points : 12 727
    Points
    12 727
    Par défaut
    Ok, j'arrête...

    Mais ce qui est demandé ici, en bash, ce n'est pas aussi trivial que ça, faut pas oublier qu'ici on est sur du décimal et pas seulement positif...

    Donc qui s'y colle ?
    Cordialement.

  19. #19
    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 disedorgue Voir le message
    faut pas oublier qu'ici on est sur du décimal et pas seulement positif...
    Sans parler de cette virgule à la c... qui va faire valser les checks numériques...

    Citation Envoyé par disedorgue Voir le message
    Donc qui s'y colle ?
    Bah, c'est le job de Dorhub non?
    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]

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 551
    Points : 19 385
    Points
    19 385
    Par défaut
    puisque bash ne peut pas le faire simplement, dans ma très grande magnanimité, et mon immense mansuétude, je vous accorde une dérogation exceptionnelle pour utiliser bc.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/05/2015, 14h57
  2. Extraire les lignes avec la valeur la plus élevée
    Par FanFan44 dans le forum Débutez
    Réponses: 4
    Dernier message: 27/08/2014, 17h06
  3. [XL-2007] Extraire la valeur la plus proche supérieure d'une liste
    Par atk_49 dans le forum Excel
    Réponses: 11
    Dernier message: 04/07/2014, 07h30
  4. [WD12] Extraire valeur la plus présente dans une série de nombre
    Par le pingouin fou dans le forum WinDev
    Réponses: 7
    Dernier message: 13/07/2011, 06h11
  5. [MySQL] Extraire les 50 valeurs les plus proches d'un entier
    Par denis.ws dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 19/01/2007, 08h42

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