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. #21
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    je vous accorde...
    Pourquoi? Tu penses vraiment qu'on va le faire ???
    Ceci dit, ça sent furieusement le type qui a tenté de le faire en bash et qui n'y est pas arrivé (je le sais, je viens de tenter). disedorgue avait raison, les nombres décimaux c'est assez casse c.... à gérer
    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]

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    disedorgue avait raison, les nombres décimaux c'est assez casse c.... à gérer
    Bah, dans l'exemple donné, il s'agit de nombres à 3 décimales max : yaka commencer par tous les multiplier par 1000 et hop !, un pb de moins.

    Et peut-être que ça incitera Dorhub à donner le lien (déjà demandé) vers le post où il a trouvé sa solution, celle ayant été postée ici étant incomplète...
    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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    ça sent furieusement le type qui a tenté de le faire en bash et qui n'y est pas arrivé
    même pas.
    pourtant disedorgue nous a montré comment faire.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #24
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    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 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    cmp_dec(){
      local yy
      printf -v yy '10#%.3f%s10#%.3f' $2 - $1
      yy=${yy//10#-/-10#}
      printf -v res %.0f\\n "$((10**9 * (${yy//,/})))e-9"
      [[ "$res" -eq "0" ]] && echo $res || echo ${res//[0-9]*/1}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ cmp_dec 5,215 5,215
    0
    $ cmp_dec 5,215 -5,215
    -1
    $ cmp_dec -5,215 5,215
    1
    $ cmp_dec -5,215 -5,215
    0
    Testé très rapidement...
    Cordialement.

  5. #25
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 101
    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 101
    Points : 4 446
    Points
    4 446
    Par défaut
    ou en plus traditionnel (algo)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    compare_nums() {
      sep="$3"
      readarray -d ""${sep:-,}"" -t a <<< "$1"
      readarray -d ""${sep:-,}"" -t b <<< "$2"
     
      [ ${a[0]} -gt ${b[0]} ] && return 1
      [ ${a[0]} -lt ${b[0]} ] && return 2
     
      [ ${a[1]} -gt ${b[1]} ] && return 1
      [ ${a[1]} -lt ${b[1]} ] && return 2
     
      return 0
     
    }
    $moi= ( !== ) ? : ;

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut


    readarray... ou IFS='.,' read -a a <<<$1, c'est pareil. je réserve readarray aux textes plus longs qu'une simple chaîne.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #27
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    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 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Je plussoie, mais faut quelque ajustement:
    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
    $ compare_nums 5,215 5,22
    $ echo $?
    1
    $ compare_nums 5,215 5,21
    $ echo $?
    1
    $ compare_nums 5 5,22
    bash: [: -gt : opérateur unaire attendu
    bash: [: -lt : opérateur unaire attendu
    $ compare_nums 5,215 ,215
    bash: [: 5 : opérateur unaire attendu
    bash: [: 5 : opérateur unaire attendu
    $ compare_nums 5 5
    $ echo $?
    1
    Cordialement.

  8. #28
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    mais faut quelque ajustement:
    Et quelques autres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ compare_nums 5 5; echo $?
    1


    [edit]Ah pardon, j'avais pas vu que ce test avait aussi été fait par disedorgue (ascenseur sur son code). Marrant, on a tous les deux pris "5" comme exemple (peut-être j'ai été influencé par ses "5,215" initiaux)

    [edit2]ok, j'ai fait les ajustements
    Code bash : 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
    compare_nums() {
    	sep="${3:-.,}"
    	IFS="$sep" read -a a <<< "$1"
    	IFS="$sep" read -a b <<< "$2"
    	test -z "${a[0]}" && a[0]=0
    	test ${#a[@]} == 1 && a[1]=0
    	test -z "${b[0]}" && b[0]=0
    	test ${#b[@]} == 1 && b[1]=0
    	#echo "a=[${a[0]}] [${a[1]}]"
    	#echo "b=[${b[0]}] [${b[1]}]"
     
    	[ ${a[0]} -gt ${b[0]} ] && return 1
    	[ ${a[0]} -lt ${b[0]} ] && return 2
     
    	[ ${a[1]} -gt ${b[1]} ] && return 1
    	[ ${a[1]} -lt ${b[1]} ] && return 2
     
    	return 0
    }
    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. #29
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    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 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Ou alors, je vais me découvrir des talents de mentaliste
    Cordialement.

  10. #30
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    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 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Cadeau....si on peut dire

    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
    cmp_dec(){
      local yy
      printf -v yy '10#%.3f%s10#%.3f' $2 - $1
      yy=${yy//10#-/-10#}
      printf -v res %.0f\\n "$((10**9 * (${yy//,/})))e-9"
      [[ "$res" -eq "0" ]] && echo $res || echo ${res//[0-9]*/1}
    }
     
    declare -A arr
     
    while read a b c
    do
     [[ $a && ${arr[$a]+a} ]] && { 
        read x d e <<<${arr[$a]}
        [[ $(cmp_dec $d $b) -lt 0 ]] && arr[$a]="$a $b $c"
        true
       } || { [[ $a ]] && arr[$a]="$a $b $c" ; }
    done </tmp/xx.txt
    printf "%s\n" "${arr[@]}"
    (Espérons que je ne me sois pas plantouillé dans les copier/coller)

    €dit: j'oubliais , le fichier /tmp/xx.txt c'est le fichier initial mais sans les lignes de commentaire comme par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ cat /tmp/xx.txt 
    1 -30,133 Orange
    3 -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
    3 30,133 Trange
    3 -40 Rrange
    Cordialement.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    pourquoi déclarer un tableau associatif ? a priori, les "noms" des groupes sont des nombres.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  12. #32
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    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 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Comme ça, il n'y a pas le "à priori"
    Cordialement.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    vue la regex d'Hizoka, validée par Dorhub, je n'aurais même pas dû mettre "a priori". Et en le mettant, je me suis dit que ça allait chipoter.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  14. #34
    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
    Le double tri est quand même sublime. Y a pas quelqu'un qui veut le passer en vert, par un pouce levé ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Le double tri est quand même sublime. Y a pas quelqu'un qui veut le passer en vert, par un pouce levé ?
    Pourquoi quand je clique sur ton lien je me retrouve sur le même post, comme si le lien pointait sur lui-même, ?

    Citation Envoyé par N_BaH Voir le message
    vue la regex d'Hizoka, validée par Dorhub, je n'aurais même pas dû mettre "a priori". Et en le mettant, je me suis dit que ça allait chipoter.
    tu l'as vue, toi, cette regex ? J'aimerais bien un lien vers le forum concerné, mais on dirait que l'OP a disparu,
    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

  16. #36
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    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 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Spécialement pour Jipété: https://forum.ubuntu-fr.org/viewtopic.php?id=2073578
    je pense que c'est la source.
    Cordialement.

  17. #37
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Le double tri est quand même sublime. Y a pas quelqu'un qui veut le passer en vert, par un pouce levé ?
    Je ne sais pas si l'adjectif "sublime" peut s'appliquer (ou alors c'est de l'humour mais il manque l'émoticon qui va bien). Parce que trier (là où un grep eût suffit) pour extraire le bon groupe puis retrier le flux initial (donc tout le fichier) là où le grep n'aurait sorti que les lignes utiles (donc moins de lignes à trier)...
    Enfin j'ai mis le pouce vert pour l'élégance de l'instruction (et puis parce que c'est demandé gentiment)
    Et (pour Jipété) chez-moi le lien a bien fonctionné. Mais on a fait remonter récemment des soucis d'affichage de pages et peut-être que c'est lié...
    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. #38
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    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 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Ici, le code est complet et semble faire le job...
    Mais je veux bien voir le même avec les 2 grep
    Cordialement.

  19. #39
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Mais je veux bien voir le même avec les 2 grep
    Je me suis mal exprimé. J'ai en effet cité deux fois "grep" mais les deux citations référençaient le même (le premier qui sert à extraire le groupe). Donc extraction, puis tri (ok là tri mais tri d'un nombre de lignes réduit) puis extraction premier élement. Style grep "^1 " fic | sort -nk2 | head -n 1.
    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. #40
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    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 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Ok, mais là, tu le fais pour un groupe, donc faut que tu boucles pour tous les groupes (que tu ne connais peut-être pas), donc oui, je fais 2 tris mais le second est très réduit puisqu'il ne fait qu'un uniq sur le champs 1.
    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 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