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 :

Comment remplacer des sed par


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Comment remplacer des sed par
    Bonjour à tous,

    Je me lance dans une modification et même amélioration de code.
    J'ai cru comprendre que le jq était mieux que le sed.
    Pourquoi? Si j'ai bien compris c'est que jq est plus "intelligent" que sed

    Je cherche donc à remplacer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '1,10d' |sed '$d'|sed '$d'|sed '$d'| sed 's/,$//'| sed "s/^\ *//g"| sed "s/\" *//g"| sed "s/\:*//g"| sed '1d'
    par l'équivalent avec jq mais ayant déjà un peu de mal à comprendre le sed j'ai du mal à faire les modifs

    Merci par avance pour vos conseils

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    jq traite le JSON.
    JSON, omme tous les langages à balises, n'a aucune obligation de format : tout peut tenir sur une seule ligne, avoir des lignes vides insérées, des tabulations...
    il faut donc un processeur qui pend uniquement en compte que ces balises.

    plutôt que de devoir traduire cette absconse litanie de seds, on préférerait voir un avant/après accompagnés de quelques explication du pourquoi des modifications opérées.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Voilà avant le traitement des sed:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [{"metric":"cpu","tags":{"host":"HP_desk56625"},"aggregateTags":[],"dps":{"1630980703":0.009999999776482582,"1630980763":0.0,"1630981063":0.0,"1630981364":0.0,"1630981664":0.0,"1630981904":0.0,"1630981964":0.009999999776482582,"1630982024":0.0,"1630982325":0.0,"1630982625":0.0,"1630982925":0.0,"1630983225":0.0,"1630983525":0.0,"1630983825":0.0,"1630984125":0.0,"1630984425":0.0,"1630984726":0.0,"1630985026":0.0,"1630985327":0.0,"1630985447":0.0,"1630985507":0.009999999776482582,"1630985567":0.0,"1630985867":0.0,"1630986167":0.0,"1630986467":0.0,"1630986767":0.0,"1630987067":0.0,"1630987367":0.0,"1630987668":0.0,"1630987848":0.0,"1630987908":0.009999999776482582,"1630987968":0.0,"1630988269":0.0,"1630988569":0.0,"1630988869":0.0,"1630989170":0.0,"1630989230":0.009999999776482582,"1630989290":0.0,"1630989530":0.0,"1630989590":0.009999999776482582,"1630989651":0.0,"1630989951":0.0,"1630990251":0.0,"1630990552":0.0,"1630990912":0.0,"1630991212":0.0,"1630991512":0.0,"1630991813":0.0,"1630992053":0.0,"1630992113":0.009999999776482582,"1630992173":0.0,"1630992473":0.0,"1630992774":0.0,"1630992954":0.0,"1630993014":0.009999999776482582,"1630993074":0.0,"1630993375":0.0,"1630993675":0.0,"1630993735":0.0,"1630993795":0.009999999776482582,"1630993855":0.0,"1630994156":0.0,"1630994516":0.0,"1630994757":0.0,"1630994817":0.009999999776482582,"1630994877":0.009999999776482582,"1630994937":0.0,"1630994997":0.009999999776482582,"1630995057":0.0}}]
    Voila le résultat après l'exécution des Sed:
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    1630980703 0.009999999776482582
    1630980763 0.0
    1630981063 0.0
    1630981364 0.0
    1630981664 0.0
    1630981904 0.0
    1630981964 0.009999999776482582
    1630982024 0.0
    1630982325 0.0
    1630982625 0.0
    1630982925 0.0
    1630983225 0.0
    1630983525 0.0
    1630983825 0.0
    1630984125 0.0
    1630984425 0.0
    1630984726 0.0
    1630985026 0.0
    1630985327 0.0
    1630985447 0.0
    1630985507 0.009999999776482582
    1630985567 0.0
    1630985867 0.0
    1630986167 0.0
    1630986467 0.0
    1630986767 0.0
    1630987067 0.0
    1630987367 0.0
    1630987668 0.0
    1630987848 0.0
    1630987908 0.009999999776482582
    1630987968 0.0
    1630988269 0.0
    1630988569 0.0
    1630988869 0.0
    1630989170 0.0
    1630989230 0.009999999776482582
    1630989290 0.0
    1630989530 0.0
    1630989590 0.009999999776482582
    1630989651 0.0
    1630989951 0.0
    1630990251 0.0
    1630990552 0.0
    1630990912 0.0
    1630991212 0.0
    1630991512 0.0
    1630991813 0.0
    1630992053 0.0
    1630992113 0.009999999776482582
    1630992173 0.0
    1630992473 0.0
    1630992774 0.0
    1630992954 0.0
    1630993014 0.009999999776482582
    1630993074 0.0
    1630993375 0.0
    1630993675 0.0
    1630993735 0.0
    1630993795 0.009999999776482582
    1630993855 0.0
    1630994156 0.0
    1630994516 0.0
    1630994757 0.0
    1630994817 0.009999999776482582
    1630994877 0.009999999776482582
    1630994937 0.0
    1630994997 0.009999999776482582
    1630995057 0.0
    Si je comprends bien avec jq je dois utiliser les balises c'est à dire quelque chose comme ça:

    curl | jq -r '{dps}
    Dernière modification par Invité ; 07/09/2021 à 10h53.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    je crois qu'il n'y a pas d'informations ultra-confidentielles, qui permettraient de mettre en péril ton PC, ou ton réseau domestique.

    merci de ne pas faire de capture d'écran à fin qu'on ait pas à recopier manuellement le fichier.
    fais-en un copier/coller, s'il te plaît.

    quant à l'utilisation de jq, je te renvoie à son manuel, qui est très bien fait, et contient des exemples.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Bonjour

    Premier jet flemmard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jq '.[].dps' fichier.json
    Deuxième jet plus poussé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jq -r '.[].dps | to_entries[] |"\(.key) \(.value)"' fichier.json

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    j'ai supprimé les captures pour coller le code.

    @flodelarab j'ai regardé sur le net.
    Donc ok pour l'option r qui va enlever les guillemets c'est bien ce que je cherche.
    Après pour le reste j'ai plus de mal:
    .[].dps --> Donc là on ne récupére que les valeurs dps mais pourquoi .[].
    | to_entries[] --> je n'ai pas trouvé la signification de ça
    |"\(.key) \(.value)" --> idem, je n'ai pas trouvé la signification de ça

    en tout cas les commandes jq on l'air d'être bien mieux que des sed successifs
    Dernière modification par Invité ; 07/09/2021 à 11h19.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    . Dans le fichier json.
    .metric Dans le fichier json, la valeur de la clé "metric"
    .[] Dans le fichier json, pour toutes les éléments.
    .[].dps Dans le ficher json, pour tous les éléments, la valeur pour la clé dps.

    Naturellement, il renvoie une structure de json comme en entrée. Il faut donc lui demander d'exploiter ce premier résultat pour un autre format. d'où la deuxième commande.

    to_entries, c'est pour utiliser key et value par la suite. Sinon il ne renverrai que la valeur, sans la clé.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    JSON, comme tous les langages à balises, n'a aucune obligation de format : tout peut tenir sur une seule ligne, avoir des lignes vides insérées, des tabulations...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Réponses: 6
    Dernier message: 09/12/2012, 18h14
  2. Combinaisons : comment remplacer des if par une boucle
    Par maccormick dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 06/10/2011, 14h40
  3. Comment remplacer les tabulations par des espaces ?
    Par richarno dans le forum Langage
    Réponses: 7
    Dernier message: 25/10/2007, 13h05
  4. Comment remplacer le clavier par des boutons ?
    Par aliwassem dans le forum Langage
    Réponses: 1
    Dernier message: 14/12/2005, 19h00
  5. Réponses: 5
    Dernier message: 30/05/2005, 16h58

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