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 :

[JQ] Extraction de données avec le parser jq


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 66
    Par défaut [JQ] Extraction de données avec le parser jq
    Bonjour,
    D'entrée je vous précise que je suis novice en programmation.

    Je souhaite récupérer les données du champ "SenOption" de mon fichier test.txt
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    {
      "status": {
        "dhcp": {
          "dhcp_data": {
            "DHCPStatus": "Bound",
            "LastConnectionError": "None",
            "Renew": false,
            "IPAddress": "xx.yy.zz.ww",
            "SubnetMask": "aaa.bbb.ccc.ddd",
            "IPRouters": "xx.yy.zz.w1",
            "DNSServers": "xx.yy.zz.aa,xx.yy.zz.bb",
            "DHCPServer": "xx.yy.zz.cc",
            "LeaseTime": 259200,
            "LeaseTimeRemaining": 196088,
            "Uptime": 407991,
            "DSCPMark": 48,
            "PriorityMark": 6,
            "Formal": false,
            "BroadcastFlag": 65535,
            "CheckAuthentication": true,
            "AuthenticationInformation": "dhcpliveboxfr250",
            "ResetOnPhysDownTimeout": 20,
            "RetransmissionStrategy": "4000 8000 16000 32000 64000 128000 -1 0",
            "RetransmissionRenewTimeout": -1,
            "SentOption": {
              "60": {
                "Enable": true,
                "Alias": "cpe-60",
                "Tag": 60,
                "Value": "736167656d"
              },
              "61": {
                "Enable": true,
                "Alias": "cpe-61",
                "Tag": 61,
                "Value": "01A43E51D1E6C0"
              },
              "77": {
                "Enable": true,
                "Alias": "cpe-77",
                "Tag": 77,
                "Value": "2b46535644534c5f6c697665626f782e496e7465726e65742e736f66746174686f6d652e4c697665626f7834"
              },
              "90": {
                "Enable": true,
                "Alias": "cpe-90",
                "Tag": 90,
                "Value": "00000000000000000000001a0900000558010341010d6674692f796274323661663c1271223451237d363a75363b722e75755203134e5b1e15bd1140eed8f50b472c5a2b7c2e"
              }
            },
            "ReqOption": {
              "1": {
                "Enable": true,
                "Alias": "cpe-1",
                "Tag": 1,
                "Value": "fffffc00"
              },
              "3": {
                "Enable": true,
                "Alias": "cpe-3",
                "Tag": 3,
                "Value": "5a3bcc01"
              },
              "6": {
                "Enable": true,
                "Alias": "cpe-6",
                "Tag": 6,
                "Value": "500af68251fd9501"
              },
              "15": {
                "Enable": true,
                "Alias": "cpe-15",
                "Tag": 15,
                "Value": "6f72616e67652e6672"
              },
              "28": {
                "Enable": true,
                "Alias": "cpe-28",
                "Tag": 28,
                "Value": "5a3bcfff"
              },
              "51": {
                "Enable": true,
                "Alias": "cpe-51",
                "Tag": 51,
                "Value": "0003f480"
              },
              "58": {
                "Enable": true,
                "Alias": "cpe-58",
                "Tag": 58,
                "Value": "00014a78"
              },
              "59": {
                "Enable": true,
                "Alias": "cpe-59",
                "Tag": 59,
                "Value": "00032a28"
              },
              "90": {
                "Enable": true,
                "Alias": "cpe-90",
                "Tag": 90,
                "Value": "0000000000000000000000646863706c697665626f786672323530"
              },
              "119": {
                "Enable": true,
                "Alias": "cpe-119",
                "Tag": 119,
                "Value": "0352454e06616363657373116f72616e67652d6d756c74696d65646961036e657400"
              },
              "120": {
                "Enable": true,
                "Alias": "cpe-120",
                "Tag": 120,
                "Value": "00067362637433670352454e06616363657373116f72616e67652d6d756c74696d65646961036e657400"
              },
              "125": {
                "Enable": true,
                "Alias": "cpe-125",
                "Tag": 125,
                "Value": "000005580c010a0001000000ffffffffff"
              }
            }
          }
        }
      }
    }
    j'applique donc la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    # jq -r '.status.dhcp.dhcp_data.SentOption[] | .SentOption' test.txt
    Mais en retour je pensais récupérer les valeurs 60, 61, 77 et 90 qui m'intéressent (uniquement celles-là) et en fait je récupère ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    # jq -r '.status.dhcp.dhcp_data.SentOption[] | .SentOption' test.txt
    null
    null
    null
    null
    Selon vous, qu'est-ce que je rate, ou est mon erreur ? quelle serait la subtilité à appliquer ?

    D'avance merci de vos lumières car là, je suis bloqué et bien évidemment j'ai épluché (peut-être mal) le man jq mais je ne trouve pas de solution.


    Cordialement
    oracle7556

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 736
    Par défaut
    Bonjour.

    Tu peux utiliser le mot-clé keys :

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    jq -r '.status.dhcp.dhcp_data.SentOption | keys[]'

    Sinon, vu que le champ Tag contient l'information cherchée, ça devrait marcher aussi :

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    jq -r '.status.dhcp.dhcp_data.SentOption[].Tag'

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    Bonjour,

    [...]data.SentOption[][...] alors que SentOption n'est pas un tableau.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 66
    Par défaut
    Bonjour,
    @N_BaH
    [...]data.SentOption[][...] alors que SentOption n'est pas un tableau.
    Effectivement vous avez raison, je me suis aussi aperçu entre temps de cette bourde.
    J'ai tout de même progressé dans mes recherches et en "singeant" un exemple trouvé ici, j'obtient maintenant cela avec la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    x# jq -r '.status.dhcp.dhcp_data.SentOption | to_entries[] | .key' test.txt
    60
    61
    77
    90
    Super j'obtient bien mes valeurs attendues.

    @Daïmanu
    Effectivement vos deux solutions marchent et de surcroît elles sont plus simples que ce que j'ai pu trouvé seul.

    Mais du coup maintenant comment convertir cette sortie "verticale" en sortie "horizontale" du style chaine : "60, 61, 77, 90" ?

    Cordialement
    oracle7556

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ jq -r '[.status.dhcp.dhcp_data.SentOption[].Tag] |@csv' /tmp/temp.json 
    60,61,77,90
    $
    Citation Envoyé par NBaH
    [...]data.SentOption[][...] alors que SentOption n'est pas un tableau.
    et pourtant, dans la solution de Daïmanu, il y a des crochets.
    je ne comprends pas.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 66
    Par défaut
    @N_BaH

    Bonjour,
    MERCI beaucoup, voilà qui répond à ma demande initiale et qui clos le sujet.
    Cordialement
    oracle7556

  7. #7
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 736
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    et pourtant, dans la solution de Daïmanu, il y a des crochets.
    je ne comprends pas.
    J'avoue que je n'y ai pas réfléchi, et en y repensant c'est effectivement bizarre.

    Je vais me renseigner aussi sur le sujet.

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

Discussions similaires

  1. extraction de données avec HTML::Parser
    Par jaljal dans le forum Web
    Réponses: 0
    Dernier message: 24/12/2010, 16h23
  2. [XSLT] extraction de donnéés avec xsl
    Par bobkorn dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 21/04/2008, 11h25
  3. Réponses: 4
    Dernier message: 07/11/2007, 15h44
  4. MSSQL : extraction de données avec bcp
    Par khaledus dans le forum Outils
    Réponses: 1
    Dernier message: 24/08/2007, 14h58
  5. MSSQL : extraction de données avec bcp
    Par khaledus dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/08/2007, 14h58

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