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 :

Quelle commande awk pour modifier des fichiers dynamiquement


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 145
    Points : 75
    Points
    75
    Par défaut Quelle commande awk pour modifier des fichiers dynamiquement
    Bonjour,

    voilà mon besoin c'est de modifier une liste de fichiers xml existants dans un répértoire de la même façon et mettre les résultats dans des fichiers dynamiquement pour normaliser les noms de fichiers de sortie.

    voilà ce que j'ai fait sur le code mais le résultat n'est pas bon, est ce que quelqu'un peut m'aider pour résoudre ce problème


    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
     
    cd repertoire
    echo "--------- Boucler sur les fichiers qui sont sur le repertoire -------"
    for i in *
    do
     
    if [ -f  "$i" ]; then
     
    # enlever l'entete et footer su fichier xml pour faciliter le split après
    echo "Enlever l'entete et footer du fichier xml "
    awk '/<Fichier/||/<\/Fichier>/||/<\?xml/{n++;next}{ print > "resultat_"$i }' $i
     
     
    fi
    done
    echo "-------- fin boucle --------"
    Merci de votre aide

  2. #2
    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

    1) Quand on traite des fichiers xml, on utilise des outils pour fichiers xml, comme xmllint. Pas awk !

    2)
    mais le résultat n'est pas bon

    Qu'est ce que ça veut dire concrètement ?
    Quelle est l'entrée ? Donne un exemple.
    Quelle est La sortie attendue ? Donne un exemple.

    3) Tu confonds les variables bash et les variables awk.
    Il n'y a aucune chance que le $i dans le script awk désigne le fichier que tu est en train de traiter.
    $i désigne le contenu du ième champ . Et comme i=0, $i désigne $0, la ligne en cours de traitement.
    FILENAME est la variable interne de awk pour désigner le fichier dont on traire une ligne.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 145
    Points : 75
    Points
    75
    Par défaut Quelle commande awk pour modifier des fichiers dynamiquement
    Bonjour,

    Voilà dans répertoire, j'ai plusieurs fichier fichier1.xml, fichier2.xml ....
    tous du même format :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?xml version="1.0" encoding="UTF-8"?>
    <Fichier>
    <node>
    </node>
    ...
    <node>
    </node>
     
    </Fichier>

    je veux leur enlever tous les parties <?xml version="1.0" encoding="UTF-8"?> et balise ouvrante <Fichier> et la balise fermante </Fichier>.

    le résultats de chaque fichier je veux le mettre dans un autre fichier
    par exemple le résultat de fichier1.xml je veux le mettre dans fichier resultat_fichier1.xml
    le résultat de fichier2.xml je veux le mettre dans le fichier resultat_fichier2.xml
    et ainsi de suite

    un fichier resultat_fichierX.xml aura la forme suivante :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <node>
    </node>
    ...
    <node>
    </node>

    remarque : les fichiers résultats ne sont pas valides comme xml mais c'est une étape intermédiaire, car après je vais les splitter et construire à nouveau des fichiers XML valides

  4. #4
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '(NR==1){e=$0;} /^<Fichier>/{c++;cible=FILENAME".split."c".xml";print e > cible;} (NR>1){print > cible;}' fichier.xml
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    awk pour ça ?
    j'aurais plutôt utiliser sed pour supprimer les deux premières lignes, et la dernière.
    GNUsed peut faire ça sur plusieurs fichiers, et conserver le fichier original en lui ajoutant une extension au choix.

    puisque les fichiers sont "tous du meme format".
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    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 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Perso, je n'utiliserais aucun des 2, puisqu'il n'y a aucune obligation dans le format xml d'avoir des notions de lignes...
    Cordialement.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    mais
    puisque les fichiers sont "tous du meme format"
    ...

    et puis, j'ai vu
    Citation Envoyé par Flodelarab
    Quand on traite des fichiers xml, on utilise des outils pour fichiers xml, comme xmllint
    je n'ai pas renchéri.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    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 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Je répondais globalement
    Sinon, je suis d'accord, sed est plus propice que awk mais on ne doit pas parler de ligne mais de patterns qui sont au nombre de 3 : <?xml......?>,<fichier> et </fichier>
    Cordialement.

  9. #9
    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
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
    	<Fichier>
    		<node>
    			1
    		</node>
    		<node>
    		</node>
     
    	</Fichier>
    	<Fichier>
    		<node>
    			2
    		</node>
    		<node>
    		</node>
     
    	</Fichier>
    </root>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xml_split lesfichiers.xml
    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
    $ grep -H '^' lesfichiers-*
    lesfichiers-00.xml:<?xml version="1.0" encoding="UTF-8"?>
    lesfichiers-00.xml:<root>
    lesfichiers-00.xml:     <?merge subdocs = 0 :lesfichiers-01.xml?>
    lesfichiers-00.xml:     <?merge subdocs = 0 :lesfichiers-02.xml?>
    lesfichiers-00.xml:</root>
    lesfichiers-01.xml:<?xml version="1.0" encoding="UTF-8"?>
    lesfichiers-01.xml:<Fichier>
    lesfichiers-01.xml:             <node>
    lesfichiers-01.xml:                     1
    lesfichiers-01.xml:             </node>
    lesfichiers-01.xml:             <node>
    lesfichiers-01.xml:             </node>
    lesfichiers-01.xml:
    lesfichiers-01.xml:     </Fichier>
    lesfichiers-02.xml:<?xml version="1.0" encoding="UTF-8"?>
    lesfichiers-02.xml:<Fichier>
    lesfichiers-02.xml:             <node>
    lesfichiers-02.xml:                     2
    lesfichiers-02.xml:             </node>
    lesfichiers-02.xml:             <node>
    lesfichiers-02.xml:             </node>
    lesfichiers-02.xml:
    lesfichiers-02.xml:     </Fichier>
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

Discussions similaires

  1. [Débutant] Créer sorties dans le Command Window pour enregistrer des fichiers
    Par clem3900 dans le forum MATLAB
    Réponses: 4
    Dernier message: 02/08/2012, 16h04
  2. Script AWK pour modifier un fichier
    Par leanima dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 13/04/2012, 12h49
  3. Commande awk pour comparer deux fichiers
    Par miketidy dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 15/03/2010, 19h45
  4. Quelle commande utiliser pour écrire des vecteurs en colonne ?
    Par minimel dans le forum Mathématiques - Sciences
    Réponses: 2
    Dernier message: 18/05/2007, 18h24
  5. Réponses: 2
    Dernier message: 09/11/2006, 23h04

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