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 :

Extraction de données suivant un pattern en shell ou perl


Sujet :

Shell et commandes GNU

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 394
    Par défaut Extraction de données suivant un pattern en shell ou perl
    Bonjour,
    Je dois récupérer tout le contenu des url pour être importé dans un autre plug-in ....

    j'ai ceci sur une seule ligne qui doit comporter a peu près 1500 lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    {"notFirstRun4052":true,"isOldUser":true,"config":{"mandatoryButtonClicked":true,"enableMandatory":true,"enableSync":true,"showPremiumOverlay":true,"showWhatsNewOverlay":true,"showWorkModeTimeFav
    Icon":true,"welcomeButtonClicked":false,"numberOfTimesSettingsPageShown":13,"EnabledBlockSite":true,"extension_id":"35","enable_context_menu":true,"firstLaunch":true,"stats":true,"gaCid":"0.67748
    41583829284-0.301988514585637-0.657508194241786","password-options":true,"enable_blocked_words_spec":true,"isPrivacyAgreed":true,"welcomeShowed":true,"showPrivacy":false,"motivationImages":true,"
    countBlocking":33,"retensionData":{"installDate":1542357805404,"sentDays":{"3":true,"4":true,"5":true,"6":true,"34":true,"67":true,"69":true,"70":true,"71":true,"72":true,"73":true,"74":true,"75"
    :true,"76":true,"77":true,"78":true,"79":true,"80":true,"81":true,"101":true,"102":true,"103":true,"104":true,"105":true,"116":true,"123":true,"136":true,"142":true,"163":true,"164":true,"170":tr
    ue,"340":true,"696":true,"698":true,"699":true,"704":true,"705":true,"1095":true,"1109":true,"1110":true,"1111":true,"1116":true},"lastAliveTime":1545298871360,"completed":true},"showAddSiteTutor
    ":false,"redirectTutorShowed":true,"blockedType":"block","showSyncButton":true,"cachedUntil":1638779527585,"showRedirectConsolidationMessage":false},"blockedSites":[{"url":"catalogue.univ-lyon3.f
    r","count":0},{"url":"eu.libcal.com","count":0},{"url":"eu.libauth.com/saml/module.php/saml/disco.php","count":0},{"url":"eu.libauth.com/saml/module.php/core/authenticate.php","count":0},{"url":"
    reservation.bibliotheque-bibb.fr","count":0},{"url":"bibliotheque-bibb.libcal.com","count":0},{"url":"bibliotheque-bibb.libcal.com/equipment/checkout/auth?","count":0},{"url":"idp.aecly
    on.fr","count":0},{"url":"cas.aeclyon.fr","count":0},{"url":"sudoc.abes.fr","count":0},{"count":0,"url":"bibliotheque-bibb.org"},{"count":0,"url":"books.google.com"},{"count":0,"url":"catalog
    .loc.gov"},{"count":0,"url":"aeclsh.fr"},{"count":0,"url":"images.amazon.com"},{"count":0,"url":"scholar.google.com"}
    Je dois extraire les url et avoir en sortie un fichier de la sorte : en fait extraire ce qui est après "url" :
    Une ligne par url comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    catalogue.univ-lyon3.fr
    reservation.bibliotheque-bibb.fr
    bibliotheque-bibb.libcal.com
    ...
    avez-vous une idée ?
    Je dois le faire en awk et/ou en Perl ?

    Il y a bien des façons de faire avec sed ou awk mais sur un pattern qui se répète comment faire ?


    Merci beaucoup

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    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 347
    Par défaut
    un simple grep -Po '"url":"\K[^"]*' fichier devrait le faire si le pattern est toujours respecté (et que ton grep supporte l'option -P)

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

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

    le JSON se traite avec un parser JSON (jq,...), ou un langage pouvant charger un module qui permettra de la traiter, si nécessaire.

    mais, dans ce cas particulier, où le format est clairement défini (tout est sur une seule ligne), c'est en effet faisable en sed; cherche "multiple pattern same line".

    edit: grilled! grep peut le faire, très simplement.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 394
    Par défaut
    Bonjour,
    merci beaucoup.
    Je n'arrivais pas avec ce pattern. C'est parfait disedorgue

    C'est vrai que j'avais fait il y a quelque temps des analyses de fichiers json en objective C et Talend mais là il fallait le faire une seule fois en script c'est plus rapide et plus simple

    Merci à vous deux.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 394
    Par défaut
    Re-bonjour,
    je dois ajouter un * avant chaque url pour pouvoir être intégré dans le nouveau plug-in

    j'ai donc fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sed  -e 's,"url":","url":"*' fich
    et
     grep -Po '"url":"\K[^"]*' fich
    Peut-on le faire en seul ligne avec le grep ? Merci à vous

    PS : J'ai des doublons en sortie de grep -Po '"url":"\K[^"]*' fich avez-vous une idée comment les enlever ? Merci
    Comme :
    grep -Po '"url":"\K[^"]*' fich | grep nature
    nature.com
    search.nature.com
    nature.com
    search.nature.com

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    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 347
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -lne '$a{$_}=1 for /"url":"\K[^"]*/g;END{foreach(keys %a){print "*$_"}}' fichier
    remplace le sed et le grep et vire les doublons.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 394
    Par défaut
    Rapidité, efficacité que dire de plus ...
    Champion toutes catégories ...
    Merci beaucoup

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

Discussions similaires

  1. [XL-2007] Extraction de données suivant plusieurs critères
    Par jejeld dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/10/2009, 11h22
  2. Extraction de données depuis fichier .NDX ...
    Par Olif_C dans le forum WinDev
    Réponses: 4
    Dernier message: 30/08/2005, 11h57
  3. [debutant] extraction de données
    Par tibpower dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 02/08/2004, 14h33
  4. Extraction de données sur des fichiers excel
    Par iupgeii dans le forum MFC
    Réponses: 3
    Dernier message: 23/01/2004, 13h53

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