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 :

Commande awk, tri et affichage


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 36
    Points : 29
    Points
    29
    Par défaut Commande awk, tri et affichage
    bonjour
    je bute un peu sur la complexité de la commande awk, peut être y a t il parmis vous des gens chevronnés sur le sujet
    voila mon pb
    j'ai un fichier que l'on va nommer IP_TABLE de cette forme:
    250 --- 120.36.241.147
    128 --- 83.194.244.36
    54 --- 92.149.174.27
    ...
    je veux savoir d'ou viennent les 10 premières ip et donc enregistrer à leur suite le pays d'origine dans un nouveau fichier
    pour obtenir un fichier du type:
    250 --- 120.36.241.147 - USA
    128 --- 83.194.244.36 - french
    54 --- 92.149.174.27 - china
    ...
    la commande qui me permet de faire cela est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    awk -F "--- " 'NR<10 { 
       system ("curl freegeoip.net/json/"$2); 
       wait 1
    }' IP_TABLE > reportCurl
    je me retrouve maintenant avec un autre fichier reportCurl contenant le résultat en json des appels à l'api de geolocalisation
    de cette forme:
    {"ip":"218.18.251.209","country_code":"CN","country_name":"China","region_code":"44","region_name":"Guangdong","city":"Guangzhou","zip_code":"","time_zone":"Asia/Shanghai","latitude":23.1167,"longitude":113.25,"metro_code":0}
    {"ip":"119.9.76.66","country_code":"HK","country_name":"Hong Kong","region_code":"","region_name":"","city":"","zip_code":"","time_zone":"Asia/Hong_Kong","latitude":22.25,"longitude":114.1667,"metro_code":0}
    ...
    je ne suis pas loin mais la je ne sais plus trop s'il faut faire dans awk ou faire appel à sed, à grep ...
    il doit y avoir plusieurs façons de faire mais si je pouvais simplifier en n'utilisant que awk je pense que ce serait pas mal ?
    comment feriez vous ?

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    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 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Bonjour,

    Si le résultat est toujours dans le même ordre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     echo '{"ip":"92.149.174.27","country_code":"FR","country_name":"France","region_code":"86","region_name":"Vienne","city":"Liniers","zip_code":"86800","time_zone":"Europe/Paris","latitude":46.6106,"longitude":0.5364,"metro_code":0}' | awk -F\" '{print $12}'
    France
    Cordialement.

  3. #3
    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
    Bonjour

    Sinon, il faudra se fixer sur "country_name":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ sed -n 's/.*"country_name":"\([^"]*\)".*/\1/p' fichier                                                                                                                              
    China
    Hong Kong
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ awk -F\" '{for (i=1;i<NF;i++) if ($i=="country_name") print $(i+2);}' fichier
    China
    Hong Kong
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  4. #4
    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,

    sinon il existe la commande jq ( https://stedolan.github.io/jq/ ) qui permet d'effectuer facilement des requêtes sur du json
    et comme apparemment reportCurl contient les données dans le même ordre que IP_TABLE tu dois pouvoir faire quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    paste IP_TABLE <(jq -r '.country_name' reportCurl)
    250 --- 120.36.241.147  China
    128 --- 83.194.244.36   Hong Kong
    54 --- 92.149.174.27

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    est-ce que j'ai envie de faire une requête HTML vers un site qui, lui, fera une requête WhoIs, au lieu de faire moi-même une requête WhoIs ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    sinon il existe la commande jq ( https://stedolan.github.io/jq/ ) qui permet d'effectuer facilement des requêtes sur du json
    Merci pour le lien sur "jq"!
    Ça peut servir!

  7. #7
    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
    Citation Envoyé par jack-ft Voir le message
    Merci pour le lien sur "jq"!
    Ça peut servir!
    clairement

    en fait j'ai donné le lien du github mais il est dans les dépôts manifestement (au moins debian, vérifié à l'instant) et perso je l'ai installé sous win via un simple chocolatey install jq ( https://chocolatey.org/ )

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    euh... moi, je l'ai bêtement installé avec la ligne de commande proposée:


Discussions similaires

  1. Option NR de la commande AWK
    Par tux2005 dans le forum Linux
    Réponses: 5
    Dernier message: 20/09/2010, 14h25
  2. Réponses: 5
    Dernier message: 13/12/2005, 14h48
  3. Commande awk
    Par ujoodha dans le forum Linux
    Réponses: 1
    Dernier message: 01/12/2005, 14h34
  4. Réponses: 11
    Dernier message: 12/04/2005, 14h08
  5. Tri à bulle - Affichage de sprite
    Par Gory dans le forum Assembleur
    Réponses: 5
    Dernier message: 10/03/2005, 15h27

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