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 :

Boucle For avec curl


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 30
    Par défaut Boucle For avec curl
    Bonjour à tous,

    Je souhaite faire une recherche de plusieurs valeurs sur une page web (.json) et pour ça j’utilise un curl + grep + awk

    Tout ça dans une boucle for afin de faire un echo vers un fichier que je m’envoi par mail.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For i in ‘curl <a href="http://blabla" target="_blank">http://blabla</a> | grep bonjour | awk{print $1}’´
    Do
    Echo $i >> fichier.txt
    Done
    Résultats:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bonjour 1
    bonjour 2
    bonjour 3
    Ma question était de savoir comment je pouvais intégrer une seconde boucle me permettant d’avoir ce genre de résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bonjour 1 - salut 1
    bonjour 2 - salut 2
    bonjour 3 - salut 3
    Avez-vous une idée svp ?

    Merci d’avance

    Cordialement,
    Laurent

  2. #2
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    Il doit y avoir des outils plus appropriés pour extraire des infos d'un .json, mais pour répondre à ta question, la boucle for et grep sont inutiles.
    Il te suffit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl http://blabla | awk '/bonjour/{print $1}'
    pour obtenir le même résultat (si je n'oublie rien).

    De même, pour extraire un autre champ, gère ça directement dans awk.
    Par exemple, si salut est dans le champ 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl http://blabla | awk '($0 ~ "bonjour" && $0 ~ "salut"){print $1 " - " $2}'
    --
    Rq : il faudrait un autre séparateur que l'espace pour obtenir le résultat que tu montres dans ton post.

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 30
    Par défaut
    Merci pour ton retour.

    Pour t’expliquer la page json, voici un exemple:

    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
      {
        "mint": 1,
        "geo": "Toto1",
        "ipaddr": "1.1.1.1",
      },
      {
        "mint": 2,
        "geo": "Toto2",
        "ipaddr": "2.2.2.2",
      },
      {
        "mint": 3,
        "geo": "Toto3",
        "ipaddr": "3.3.3.3",
      },

    Je souhaiterais récupérer geo et ipaddr sur la meme ligne

    Je pensais donc le faire dans une boucle

    Laurent

  4. #4
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    Oui, c'est ce que je te disais, il vaudrait mieux utiliser un parser json, car il y a plein de trucs inutiles pour délimiter les champs dans ce type de fichiers, qui obligent à faire des traitements supplémentaires dans des outils généralistes comme awk.
    Mais bon, si tu souhaites récupérer ce qu'il y a après geo et ipaddr comme je le suppose (et pas geo et ipaddr eux-mêmes), tu peux déjà faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F':' '$1 ~ "geo"{printf("%s",$2)} $1 ~ "ipaddr"{printf("%s\n",$2)}' fichier
    qui te donnera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     "Toto1", "1.1.1.1",
     "Toto2", "2.2.2.2",
     "Toto3", "3.3.3.3",
    Ensuite, il te reste à mettre en forme si tu veux te débarrasser des guillemets et virgules (ce qu'un parser json ferait de lui-même j'imagine).

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 30
    Par défaut
    Cool super, merci

    Je testerais tout ça ;-)

  6. #6
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2014
    Messages : 30
    Par défaut
    Donc ça marche, merci beaucoup.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     awk  '$1 ~ "geo"{gsub(/,/,"-")gsub(/"/,"");printf("%s",$2)} $1 ~ "ipaddr"{gsub(/"/,"")gsub(/,/,"---->");printf("%s\n",$2)}'
    Résultats:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Toto1-1.1.1.1---->
    Toto2-2.2.2.2---->
    Toto3-3.3.3.3---->
    Après tout ça, je n'sais pas si il est possible d'y intégrer une commande ping ou traceroute pour mon champ "ipaddr" :-/

Discussions similaires

  1. [VBA] Boucle "For" avec valeurs spécifiques
    Par NiKoTiNe dans le forum VBA Access
    Réponses: 13
    Dernier message: 28/03/2025, 09h10
  2. Boucle for avec saut
    Par michel71 dans le forum Delphi
    Réponses: 3
    Dernier message: 25/02/2007, 16h16
  3. boucle for avec condition
    Par Daniel Magron dans le forum Delphi
    Réponses: 4
    Dernier message: 22/01/2007, 16h18
  4. Réponses: 2
    Dernier message: 28/08/2006, 18h17
  5. [VB6] boucle for avec liste de valeur defini
    Par Morpheus2144 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 06/04/2006, 18h12

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