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 :

Créer et récupérer des variables dans une boucle for


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Ingénieur Text Mining
    Inscrit en
    Juin 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Text Mining
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2016
    Messages : 3
    Points : 0
    Points
    0
    Par défaut Créer et récupérer des variables dans une boucle for
    Bonjour,

    Je souhaiterais faire une copie du contenu d'un ensemble de fichiers xml dont j'ai le chemin dans une liste externe dont voici un extrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SVIE_1177_2015-09-23_V3/Entities/Entity25023.xml
    SVIE_1177_2015-09-23_V3/Entities/Entity24969.xml
    SVIE_1177_2015-09-23_V3/Entities/Entity24997.xml
    SVIE_1119_2010-11-24_V3/Entities/Entity35210.xml
    SVIE_1123_2011-03-23_V3/Entities/Entity35591.xml
    SVIE_1134_2012-02-22_V3/Entities/Entity30487.xml
    SVIE_1163_2014-07-23_V3/Entities/Entity25712.xml
    SVIE_1163_2014-07-23_V3/Entities/Entity25807.xml
    SVIE_1125_2011-05-25_V3/Entities/Entity35690.xml
    SVIE_1122_2011-02-23_V3/Entities/Entity35479.xml
    SVIE_1122_2011-02-23_V3/Entities/Entity35518.xml
    SVIE_1165_2014-09-24_V3/Entities/Entity19361.xml
    Comme on peut le voir, ces fichiers d'origine sont dispatchés dans plusieurs dossiers et je souhaiterais les rassembler dans un même dossier mais en gardant leur nom (Entity35518.xml, Entity19361.xml ... sous un dossier "corpus")

    J'ai réussi à extraire de cette liste les noms de fichier de destination :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ for line in $(cat chemin_raccourci_fichier_projet_MESH_ANATOMIE.txt);do echo $line|awk -F\/ '{print $3}';done
    Entity25023.xml
    Entity24969.xml
    Entity24997.xml
    Entity35210.xml
    Entity35591.xml
    Entity30487.xml
    Entity25712.xml
    Entity25807.xml
    Entity35690.xml
    Mais au moment d'enregistrer ces noms dans une variable dont j'ai besoin pour créer les nouveaux fichiers, je me retrouve avec le même nom plusieurs fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ for line in $(cat chemin_raccourci_fichier_projet_MESH_ANATOMIE.txt);do variable=$(echo $line|awk -F\/ '{print $3}') echo $variable;done
    Entity30284.xml
    Entity30284.xml
    Entity30284.xml
    Entity30284.xml
    Entity30284.xml
    Entity30284.xml
    Entity30284.xml
    Entity30284.xml
    Entity30284.xml
    Entity30284.xml
    Entity30284.xml

    D'ailleurs, si je mets un nom autre que "variable", le shell m'affiche des lignes vides...

    Et du coup je ne peux pas faire ma copie du contenu des fichiers

    C'est peut être une erreur de débutant mais là je seche...

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Bonjour,

    Comment lire un fichier
    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while IFS='/' read -r -a path; do fichier="${path[@]: -1}"; echo "$fichier"; done <tonFichier
    Entity25023.xml
    Entity24969.xml
    Entity24997.xml
    Entity35210.xml
    Entity35591.xml
    Entity30487.xml
    Entity25712.xml
    Entity25807.xml
    Entity35690.xml
    Entity35479.xml
    Entity35518.xml
    Entity19361.xml
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Ingénieur Text Mining
    Inscrit en
    Juin 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Text Mining
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2016
    Messages : 3
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Merci pour votre réponse, mais j'ai préféré garder ma méthode. Mais vous m'avez mis sur la piste:

    il manquait un point virgule entre mes deux commandes internes au "do". Il fallait donc écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ for line in $(cat chemin_raccourci_fichier_projet_MESH_ANATOMIE.txt);do variable=$(echo $line|awk -F\/ '{print $3}') ;echo $variable;done
    Entity25023.xml
    Entity24969.xml
    Entity24997.xml
    Entity35210.xml
    Entity35591.xml
    Entity30487.xml
    Entity25712.xml
    Entity25807.xml

  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 459
    Points
    13 459
    Par défaut
    Bonjour

    Déjà, arrête de parler du "contenu des fichiers". Car si c'était vraiment le contenu que tu voulais copier, un simple cat Entity*.xml >fichier suffirait.
    C'est bien les fichiers et non leur contenu que tu veux copier.

    Ensuite, des fichiers sont en doublon. Tu veux les renommer avant de les copier. N'est-ce pas ?
    Quelle est la règle de renommage ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Ingénieur Text Mining
    Inscrit en
    Juin 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Text Mining
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2016
    Messages : 3
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Bonjour

    Déjà, arrête de parler du "contenu des fichiers". Car si c'était vraiment le contenu que tu voulais copier, un simple cat Entity*.xml >fichier suffirait.
    C'est bien les fichiers et non leur contenu que tu veux copier.
    Oui c'est ce que je souhaitais faire au final. C'est juste que j'y suis allé étape par étape Au final, j'ai bien un cat dans ma commande finale. Mais elle est plus compliquée que ce que tu penses ^^ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ for line in $(cat chemin_raccourci_fichier_projet_MESH_ANATOMIE.txt);do variable=$(echo $line|awk -F\/ '{print $3}') ;cat ../../Licia/Livraisons_Immanens/$line>>$variable.xml;done

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    j'ai préféré garder ma méthode
    tu préfères une méthode plus lente.
    le shell n'est déjà pas très rapide, mais, en lui faisant appeler des commandes externes, ça ne va pas accélérer l'exécution.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    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 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Bonjour,
    J'ai rarement vu du code si crade, une boucle for qui fait la même chose (ou alors j'ai rien compris de ton code) :
    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in $(<chemin_raccourci_fichier_projet_MESH_ANATOMIE.txt); do cat "../../Licia/Livraisons_Immanens/$i">>"${i##*/}"; done
    Cordialement.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 10/01/2013, 11h07
  2. Créer des variables dans une boucle
    Par xess91 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 06/03/2010, 10h41
  3. [E-07] créer des variables dans une boucle ?
    Par edouardg dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/12/2008, 22h19
  4. Afectation des variables dans une boucle
    Par Yoni Lebene dans le forum Delphi
    Réponses: 3
    Dernier message: 05/01/2007, 18h52

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