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 :

Script pour manipuler une chaine d'un nom de fichier


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 40
    Par défaut Script pour manipuler une chaine d'un nom de fichier
    Bonjour, j'espere que vous allez très bien chères membres,

    SVP j'ai un problème urgent, je travaille dans une société il m'ont demander de programmer un scripte shell ou awk, je vais vous axpliquez mon problème:

    on travail sous linux on a un repertoir qui contient des fichiers logs et que chaque fichiers est nommé par log_(date-du-jour)_ps1.txt exemple; log_20130517_sp1 sachant que chaque jour plusieurs fichiers penvent etre générés avec la même date juste la derniere partie du nom qui change ps1, ps2.. et biensur le repertoir contient des fichiers des dates précédente.

    nous on veut chercher dans ce répetoire et trouver les fichiers qui ont dans le deuxième champs la meme date du jour j pour qu'on puisse mettre le contenu de tous les fichiers de la meme date dans un seul fichier.

    pour l'instan on a trouvé une solution mais pas efficace! parceque je cherche juste si le caractere existe dans le nomn du fichier, nous on veut préciser les champs voilà le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/bin/bash
    cd /home/error/Desktop/MON_SCRIPT
    ladate="$(date -d '1 day ago' '+%Y%m%d')"
    find /home/error/Desktop/MON_SCRIPT -iname "*$ladate*" -exec cp {} /home/error/Desktop/MON_SCRIPT/doss/ \;
    je connais pas grand chose sur awk mais j'espère avoir votre aide

    merci a vous.

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 816
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mond14 Voir le message
    on travail sous linux on a un repertoir qui contient des fichiers logs et que chaque fichiers est nommé par log_(date-du-jour)_ps1.txt exemple; log_20130517_sp1 sachant que chaque jour plusieurs fichiers penvent etre générés avec la même date juste la derniere partie du nom qui change ps1, ps2.. et biensur le repertoir contient des fichiers des dates précédente.

    nous on veut chercher dans ce répetoire et trouver les fichiers qui ont dans le deuxième champs la meme date du jour j pour qu'on puisse mettre le contenu de tous les fichiers de la meme date dans un seul fichier.
    Salut
    Etant donné que les fichiers sont rangés par ordre alphabétiques, alors tu es certain que
    log_20130517_ps1
    log_20130517_ps2
    log_20130517_ps3
    log_20130517_ps4
    seront contigus et seront avant log_20130518_ps1 et après log_20130516_ps4

    Donc te suffit de faire un script shell qui exploite cet avantage. Donc à chaque fichier tu récupères sa date et si elle change par rapport à la date précédente c'est que tu as fini de traiter le groupe précédent.

    Exemple
    Code bash : 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
    #!/bin/bash
    for f in log_*_ps*           # J'aurais pu mettre ls log_*_ps* | while read f mais j'ai tellement peur de N_Bah :mouarf:
    do
        date=$(echo "$f" |cut -f2 -d_)
        if test "$date" != "$mem"
        then
            # On a changé de date - On mémorise donc cette nouvelle date
            mem=$date
     
            # On crée le fichier qui servira à regrouper tous les autres
            # Mais ailleurs pour pas qu'il pollue le script
            recap="../autre_rep/log_$mem_ps"
            >"$recap"
        fi
     
        # On connait la date de référence, on recopie donc le fichier
        echo "Copie de $f dans $recap"
        cat "$f" >>"$recap"
    done

    En y réfléchissant, ça peut même fonctionner même si les fichiers allant ensembles ne sont pas contigus dans le dossier. Mais dans ce cas faut juste éviter de vider systématiquement le fichier recap quand on trouve une nouvelle date...

    Citation Envoyé par mond14 Voir le message
    je connais pas grand chose sur awk...
    D'autant plus que je n'ai pas vu de awk dans ton code et que cet outil est fait pour traiter le contenu des fichiers et non le contenu des répertoires...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    nous on veut préciser les champs
    Quels champs? ps? les champs à l'intérieur des fichiers? Tu décris une situation mais quelle est la question?

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 816
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Quels champs? ps? les champs à l'intérieur des fichiers? Tu décris une situation mais quelle est la question?
    C'est vrai qu'il est un peu brouillon dans sa question. Moi j'ai présumé qu'il voulait ranger dans un même fichier le contenu de tous les fichiers log_XXXXXX_ps? qui ont le même XXXXXX...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 40
    Par défaut
    Bonsoir,

    Merci beaucoup Sve@r pour votre réponse je vais essayer votre solution et je vais vous répondre pour vous dire si ça marche ou pas.
    Exactement c'est ce que je voulais dire.
    voulais ranger dans un même fichier le contenu de tous les fichiers log_XXXXXX_ps, qui ont le même XXXXXX...

    Merci beaucoup

  6. #6
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 40
    Par défaut
    Bonjour,

    je vous remercie beaucoup, ça a bien marché!

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 816
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mond14 Voir le message
    Bonjour,

    je vous remercie beaucoup, ça a bien marché!
    Oui. L'important, ce n'est pas que ça ait marché ou pas (surtout que tous ceux qui interviennent ici pouvaient voir immédiatement que mon script fonctionnerait).
    L'important c'est que tu aies compris
    1. mon idée
    2. la façon dont je l'ai réalisée

    Afin que si un jour tu as un problème analogue, tu puisses le résoudre tout seul sans avoir à venir demander un script sur un forum...

    A+
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. Script pour remplacer une chaine de caractères par une autre
    Par babiêtiguiya dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 28/02/2012, 14h57
  2. 1 script, pour animer une image, qui en regroupe 3 scripts
    Par vampyer972 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 09/04/2006, 00h06
  3. utilisé une chaine comme un nom de variable sous delphi ?
    Par hatem_info dans le forum Langage
    Réponses: 3
    Dernier message: 11/10/2005, 16h22
  4. Script pour fermer une session ssh
    Par le y@m's dans le forum Linux
    Réponses: 8
    Dernier message: 19/09/2005, 15h49
  5. [langage] cherche script pour formater une chaine
    Par MASSAKA dans le forum Langage
    Réponses: 7
    Dernier message: 12/11/2003, 12h18

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