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 :

Lire dans plusieurs fichiers texte selon le nom de fichier


Sujet :

Shell et commandes GNU

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Points : 133
    Points
    133
    Par défaut Lire dans plusieurs fichiers texte selon le nom de fichier
    Bonjour,

    Suite à mon traitement de données je génère plusieurs fichiers à chaque fois , je veux lire ces fichiers selon leur noms,

    Chaque fichier aura comme nom pp$i$j.txt , pour chaque i ,on aura n fichier de j

    par exemple pour i =1 j'aurai :
    pp11.txt
    pp12.txt
    etc
    puis i=2
    pp21.txt .....
    utiliser une boucle for pour lire tous les fichiers texte, mais comment récupérer le nom de chaque fichier ?
    merci d'avance

  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 récupérer le nom de chaque fichier ?
    le nom de chaque fichier est dans $fich...
    que veux-tu de plus ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    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
    Veux-tu récupérer les valeurs de i et j pour un nom de fichier donné (retourné dans la liste *.txt) ?

    Veux-tu faire une boucle pour toutes les valeurs de i, laquelle contiendra soit une boucle pour toutes les valeurs de j soit une boucle sur tous les fichiers correspondant au i donné ?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Points : 133
    Points
    133
    Par défaut
    Bonjour,

    Veux-tu faire une boucle pour toutes les valeurs de i, laquelle contiendra soit une boucle pour toutes les valeurs de j soit une boucle sur tous les fichiers correspondant au i donné ?
    je veux récupérer les fichiers pour chaque i à part, donc je pense que l'idée est de faire une condition sur chaque nom du fichier tel que le 3 ème caractère sera le i donné ?

  5. #5
    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
    cela est-il accompli dans le script qui a généré les fichiers ? et donc la valeur maximale/finale de i est connue ? la valeur minimale/initale de i est-elle toujours la même (0, 1, autre) ?

    faut-il qu'on devine tout ? tu travailles sur un projet pour la NSA ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 196
    Points : 358
    Points
    358
    Par défaut
    i ... i ... i .... il faut arriver à comprendre ce que tu veux ... allez j'essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    i=3
    find . -name "*$i*" -print | while read fichier 
    do
        echo $fichier
    done
    i doit être inférieur à 10 ... bien entendu ...

  7. #7
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Citation Envoyé par mvvvv Voir le message
    i doit être inférieur à 10 ... bien entendu ...
    +1
    Ton format de fichier est mal fichu :
    Mettons que i = 11 et j = 1. Le nom de fichier sera 'pp111.txt'.
    Maintenant, si i = 1 et j = 11, on aura 'pp111.txt'.

    Et ça marche aussi avec i = 12 ou j = 21-29, i = 13 ou j=31-39, ...

    Un conseil : ajoute un séparateur entre i et j.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Points : 133
    Points
    133
    Par défaut
    salut,

    désolé si j'étais pas clair,

    bon , l'idée de mvvv m'aide , mais pas résolu mon problème

    si je veux filter dans mon traitement que sur les fichiers dont le nom comence par exemple par pp1 dans toute la liste de :
    pp12.txt , pp23.txt, pp35.txt , pp111.txt, pp16.txt .....

    Merci à tous

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Points : 133
    Points
    133
    Par défaut
    Comment je peux écrire un condition sur le nom de fichier tel que début de chaque nom soit pp1 ?

  10. #10
    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 écrire un condition sur le nom de fichier tel que début de chaque nom soit pp1
    plusieurs possibilités :
    if test "${fich:0:3}" = pp1; then ...; fi,

    if [[ $fich == pp1* ]]; then ...; fi,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    case $fich in
    pp1*) ... ;;
    esac
    seule cette dernière méthode est POSIX/portable.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Points : 133
    Points
    133
    Par défaut


    Merci

  12. #12
    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 AJ_ing Voir le message
    si je veux filtrer dans mon traitement que sur les fichiers dont le nom commence par exemple par pp1 dans toute la liste
    Plutôt que tester a posteriori le nom du fichier, autant filtrer tout de suite le nom du fichier avec "pp*$i*, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    i=3
    find . -name "pp*$i*" -print  |  while read fichier
      do
        echo $fichier
      done
    )jack(

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/06/2011, 11h00
  2. Réponses: 3
    Dernier message: 10/09/2009, 16h24
  3. Réponses: 3
    Dernier message: 19/06/2007, 14h07
  4. Nom de fichier texte
    Par diego63 dans le forum C++
    Réponses: 1
    Dernier message: 27/11/2006, 23h41
  5. Réponses: 6
    Dernier message: 02/06/2005, 12h44

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