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 le dernier nombre


Sujet :

Shell et commandes GNU

  1. #1
    Rédacteur


    Homme Profil pro
    Instituteur retraité
    Inscrit en
    Novembre 2015
    Messages
    891
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Instituteur retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 891
    Points : 4 157
    Points
    4 157
    Billets dans le blog
    1
    Par défaut Extraire le dernier nombre
    Bonjour,

    je souhaite extraire la dernière valeur numérique des lignes répondant à un pattern.
    J'utilise cette commande :
    Code shell : Sélectionner tout - Visualiser dans une fenêtre à part
    numero_plugin=$(grep "genmon" /home/administrateur/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml | sed 's/[^[:digit:]]//g' | awk '{print $NF}')
    mais obtient l'ensemble des valeurs numériques et non la dernière :
    Code shell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $echo "$numero_plugin"
    5 7 8 9
    comme si la commande se réduisait à :
    Code shell : Sélectionner tout - Visualiser dans une fenêtre à part
    numero_plugin=$(grep "genmon" /home/administrateur/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml | sed 's/[^[:digit:]]//g')
    Si je force le caractère 'espace' comme séparateur
    Code shell : Sélectionner tout - Visualiser dans une fenêtre à part
    awk 'BEGIN { FS = " " } {print $NF}'
    cela ne change rien.

    Or, si je fais
    Code shell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    test="5 7 8 9"
    echo $test | awk '{print $NF}
    j'obtiens bien la dernière valeur numérique, i.e. 9.

    Tout se passe comme si les valeurs 5 7 8 9 contenues dans $numero_plugin n'étaient pas séparées par des espaces.
    Ou alors ce sont bien des espaces, mais awk ne fonctionne pas dans ce contexte.

    Qu'est-ce qui m'échappe ?
    Plus on apprend, plus on découvre que ce que l'on sait est insignifiant face à tout ce que l'on ne sait pas.
    Retrouvez la liste de mes articles et tutoriels sur la sauvegarde-restauration, les distributions éducatives, le système Linux et le Raspberry pi en cliquant sur ce lien.

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut
    Salut,
    Ce qui est étrange, c'est qu'il te reste autre chose que des chiffres... tu supprimes tout sauf les chiffres...
    Du coup, je ferais plus ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numero_plugin=$(grep "genmon" /home/administrateur/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml | sed 's/.*\([[:digit:]]\+\).*/\1/')
    Sous Kubuntu 20.04

  3. #3
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    une alternative qui fait peut-être également l'affaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep genmon fichier | grep -Po '\d+(?=[^\d]*$)'

  4. #4
    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
    numero_plugin=$(grep "genmon" /home/administrateur/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml | sed 's/[^[:digit:]]//g' | awk '{print $NF}')
    mais quelle horreur !
    sed sait faire ce que fait grep.
    awk sait faire ce que fait grep.
    sed et awk savent faire ± les mêmes choses.

    il serait utile d'avoir un fichier exemple, de préférences en pièce jointe, pour que le format interne ne soit pas modifié par l'affichage du forum.
    sinon on peut spéculer tout et n'importe quoi.
    .
    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 286
    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 286
    Points : 12 742
    Points
    12 742
    Par défaut
    Citation Envoyé par Philippe Dpt35 Voir le message
    Qu'est-ce qui m'échappe ?
    A vu de nez, chaque nombre n'est tout simplement pas sur la même ligne.
    Cordialement.

  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
    Bonjour

    Je ne vois rien d'anormal. 4 lignes se finissent, respectivement, par 5, 7, 8, 9. Et ce qui transforme le retour à la ligne en espace est certainement la commande contenue dans $echo.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '/genmon/{gsub(/[^[:digit:]]/,"",$0);s=$0;} END{print s}' /home/administrateur/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut
    Suite à la remarque de N_BaH (j'avais fait un test avec un echo, du coup pas de grep utilisé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numero_plugin=$(sed -n '/genmon/ s/.*\([[:digit:]]\+\).*/\1/p' /home/administrateur/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml)
    Sous Kubuntu 20.04

  8. #8
    Rédacteur


    Homme Profil pro
    Instituteur retraité
    Inscrit en
    Novembre 2015
    Messages
    891
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Instituteur retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 891
    Points : 4 157
    Points
    4 157
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    mais quelle horreur !
    sed sait faire ce que fait grep.
    awk sait faire ce que fait grep.
    sed et awk savent faire ± les mêmes choses.
    A faire les choses la tête dans le guidon dans l'espoir d'aller vite fait oublier de prendre du recul !

    Citation Envoyé par BufferBob
    grep genmon fichier | grep -Po '\d+(?=[^\d]*$)'
    me donne toutes les valeurs sans conserver uniquement la dernière.
    Idem pour
    Citation Envoyé par hizoka
    numero_plugin=$(sed -n '/genmon/ s/.*\([[:digit:]]\+\).*/\1/p' /home/administrateur/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml)
    Roulements de tambour...
    Citation Envoyé par Flodelarab
    awk '/genmon/{gsub(/[^[:digit:]]/,"",$0);s=$0;} END{print s}' /home/administrateur/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml
    donne bien le résultat attendu !

    Citation Envoyé par Flodelarab=disedorgue
    A vu de nez, chaque nombre n'est tout simplement pas sur la même ligne.
    Je ne vois rien d'anormal. 4 lignes se finissent, respectivement, par 5, 7, 8, 9. Et ce qui transforme le retour à la ligne en espace est certainement la commande contenue dans $echo.
    Ben oui ! Si j'avais eu l'intelligence de tout simplement faire
    Code shell : Sélectionner tout - Visualiser dans une fenêtre à part
    grep "genmon" /home/administrateur/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml | sed 's/[^[:digit:]]//g' | awk 'BEGIN { FS = " " } {print $NF}'
    j'aurais vu que la console me sortait les valeurs sur des lignes différentes !

    Merci à tous pour votre aide.
    Plus on apprend, plus on découvre que ce que l'on sait est insignifiant face à tout ce que l'on ne sait pas.
    Retrouvez la liste de mes articles et tutoriels sur la sauvegarde-restauration, les distributions éducatives, le système Linux et le Raspberry pi en cliquant sur ce lien.

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

Discussions similaires

  1. [MySQL] Comment extraire les dernières mesures si elles ne sont pas de la même data
    Par pierrot10 dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 21/03/2019, 20h07
  2. Réponses: 2
    Dernier message: 06/09/2013, 14h44
  3. Extraire un nombre dans une chaine
    Par SIGOliv dans le forum Access
    Réponses: 16
    Dernier message: 13/03/2006, 15h44
  4. [MySQL] extraire des nombre d'une chaine de caractères et addition
    Par Yotho dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 04/03/2006, 16h54
  5. [LG]Extraire des nombres d'une chaine
    Par audreym31 dans le forum Langage
    Réponses: 4
    Dernier message: 18/01/2004, 21h24

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