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

Linux Discussion :

Extraire données d'une liste de fichiers dans différents répertoires


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 17
    Par défaut Extraire données d'une liste de fichiers dans différents répertoires
    Bonjour,

    j'ai un site d'annonces qui reçoit des informations au format xml (mon fichier xml contient 2 balises). J'ai ces fichierx xml disséminés dans différents sous-répertoires, et je suis en train d'écrire un script qui irait lire l'ensemble de ces répertoires, en extraire les fichiers xml et lire le contenu de chacun...

    Pour cela, voici ce que j'ai tapé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    find /repertoire/ -maxdepth 2 -name *xml | sed -e "s/^<balise1>\(.\)</balise1></balise2>\(.\)</balise2>/\1/"
    Bon, ça marche pas...
    Le find consiste à chercher dans le répertoire appelé "repertoire" et ses fils (profondeur de 2).
    Puis le -name pour chercher dans les fichiers xml.
    Puis le sed, là ça se complique, je lui demande de m'extraire les données de chaque balise et de les afficher... mais je sais pas faire le "afficher"...

    Sinon, j'ai trouvé ça aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    find /repertoire -exec grep -q "chaine à rechercher" '{}' \; -print
    qui est bien mais je sais pas l'ajuster à ma demande... sniff..

    Et pour terminer ce bout de code qui fonctionne aussi.. mais n'est pas assez "puissant" parce qu'il ne traite qu'1 seul fichier...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    perl -ne '$"="\n";@t=/<balise1>(.*?)<\/balise1><balise2>(.*?)<\/balise2>/g; print "@t\n"' /repertoire/fichier.xml
    Merci de votre aide.

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    tu y etait presque

    ne fait pas find .. | sed

    mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find ............; -exec sed -e "........................" {} \;
    ou alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed -e "......................." $(find ...............................)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 17
    Par défaut
    Merci.

    Mais voilà, un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    find /home/ -maxdepth 2 -name *xml -exec sed -e "/<balise1>\(.\)</balise1><balise2>\(.\)</balise2>" {} \;
    affiche le contenu en entier (?) du fichier xml...


    Une erreur dans ce que j'ai tapé ?

    Et sinon, si tu l'as pas vu, je suis aussi sur ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    perl -ne '$"="\n";@t=/<balise1>(.*?)<\/balise1><balise2>(.*?)<\/balise2>/g; print "@t\n"' /repertoire/fichier.xml
    Est-ce qu'on peut l'intégrer au find ?

  4. #4
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par Flyer007 Voir le message
    Et sinon, si tu l'as pas vu, je suis aussi sur ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    perl -ne '$"="\n";@t=/<balise1>(.*?)<\/balise1><balise2>(.*?)<\/balise2>/g; print "@t\n"' /repertoire/fichier.xml
    Est-ce qu'on peut l'intégrer au find ?
    Je pense que ceci pourrait marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -ne '$"="\n";@t=/<balise1>(.*?)<\/balise1><balise2>(.*?)<\/balise2>/g; print "@t\n"' $(find /home/ -maxdepth 2 -name *xml)
    ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /home/ -maxdepth 2 -name *xml -exec perl -ne '$"="\n";@t=/<balise1>(.*?)<\/balise1><balise2>(.*?)<\/balise2>/g; print "@t\n"' {} \;
    --
    Jedaï

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 17
    Par défaut
    Salut, merci, les 2 scripts fonctionnent.

    Ce problème est donc maintenant résolu.

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

Discussions similaires

  1. [Débutant] Afficher une liste de fichiers dans un ListBox
    Par Zwblirgx dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 03/10/2007, 09h47
  2. [Débutant] Afficher une liste de fichier dans un popupmenu
    Par Maickeul dans le forum Interfaces Graphiques
    Réponses: 10
    Dernier message: 17/07/2007, 09h46
  3. Réponses: 2
    Dernier message: 20/06/2007, 10h34
  4. Réponses: 1
    Dernier message: 05/03/2007, 20h51
  5. Réponses: 1
    Dernier message: 24/05/2006, 11h00

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