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 :

Compression de fichier pendant traitement


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Février 2008
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 107
    Par défaut Compression de fichier pendant traitement
    Bonjour,
    Suite à un appel ouvert sur ce site :
    http://www.developpez.net/forums/d10...de-substituer/

    J'ai besoin, en raison du manque de place sur notre serveur, de compresser les fichiers que je vais traiter, pas ceux qui auront été "bien" filtrés mais les anciens.
    Hors pour obtenir mes fichiers filtrés, je dois "dérouler" tout mon process pour les filtrer.

    Comment donc faire pour que je puisse compresser mes fichiers et exécuter le traitement pour filtrer .


    Merci.

  2. #2
    Membre très actif

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Par défaut
    Et bien il te suffit de compresser tous tes fichiers (gzip * ou équivalent).

    Et soit de passer par un zcat avant ton awk, soit de commencer par décompresser le fichier, faire le traitement, puis le recompresser...

    En fait, je ne vois pas trop quel est le problème, donc j'ai peut-être mal saisi

    Exemple (en partant de mon dernier script et en supposant que ta liste ne comporte pas les extensions .gz) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ...
    while read fic
    do
            ficold=$(date +%Y%m%d%H%M)_${fic}.old
            mv ${fic}.gz ${ficold}.gz
            gunzip ${ficold}.gz
            awk '{if (/30076.*2019/ || /10468.*2240/ || /1010.*8096/) {$0=substr($0,1,4) "'$idmois'" substr($0,11)} print}' $ficold > $fic
            gzip $ficold
    done < lst_fic_so.txt
    autre solution (ici, la liste comporte les extension .gz) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...
    while read fic
    do
            ficold=$(date +%Y%m%d%H%M)_${fic}.old
            ficnew=${fic%%.*} # ou ficnew=$(basename $fic ".gz") selon les noms en entrée
            mv $fic $ficold
            zcat $ficold | awk '{if (/30076.*2019/ || /10468.*2240/ || /1010.*8096/) {$0=substr($0,1,4) "'$idmois'" substr($0,11)} print}' > $ficnew
    done < lst_fic_so.txt

  3. #3
    Membre actif
    Inscrit en
    Février 2008
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 107
    Par défaut
    La 2ème solution em donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    201105191349_DAIDWR.old.Z: No such file or directory
    Sauvegarde de l'ancien fichier  --> 201105191349_DAIDWR.old
    Creation du nouveau fichier --> DAIDWR.txt
    201105191349_PTFDWR.old.Z: No such file or directory
    Sauvegarde de l'ancien fichier  --> 201105191349_PTFDWR.old
    Creation du nouveau fichier --> PTFDWR.txt
    201105191349_CHQTLAB-extract.old.Z: No such file or directory
    Sauvegarde de l'ancien fichier  --> 201105191349_CHQTLAB-extract.old
    Creation du nouveau fichier --> CHQTLAB-extract.txt



    Pourquoi ?

  4. #4
    Membre très actif

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Par défaut
    Mes solutions sont des exemples à adapter : il peut y avoir des petites coquilles à corriger car je ne sais pas exactement de quoi tu pars et car je fais ça vite fait

    Et surtout, surtout, à ne pas lancer tel quel : si jamais tu perds des fichiers car j'ai fait une erreur, ça serait dommage ! Il faut que tu comprennes ce qui est fait avant !

    En l’occurrence, je pense que c'est assez simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    201105191349_DAIDWR.old.Z: No such file or directory
    >> le fichier n'est pas trouvé...

    Si on regarde le code, l'endroit où le fichier old est utilisé, c'est le zcat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    zcat $ficold | awk '{if (/30076.*2019/ || /10468.*2240/ || /1010.*8096/) {$0=substr($0,1,4) "'$idmois'" substr($0,11)} print}' > $ficnew
    J'ai mis zcat $ficold, or, zcat ajoute automatiquement une extension lorsqu'il n'y en a pas qui correspond à un fichier compressé, c'est pour ça qu'il te dit qu'il ne trouve pas 201105191349_DAIDWR.old.Z. J'ai juste oublié d'ajouter cette extension au nom .old. Une autre solution si les fichiers sont déjà avec une extension .Z, c'est de ne pas mettre le suffixe .old et de se contenter d'ajouter le timestamp devant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ...
    while read fic
    do
            ficold=$(date +%Y%m%d%H%M)_${fic}.old.Z
    # ou ficold=$(date +%Y%m%d%H%M)_${fic}
            ficnew=${fic%%.*} # ou ficnew=$(basename $fic ".gz") selon les noms en entrée
            mv $fic $ficold
            zcat $ficold | awk '{if (/30076.*2019/ || /10468.*2240/ || /1010.*8096/) {$0=substr($0,1,4) "'$idmois'" substr($0,11)} print}' > $ficnew
    done < lst_fic_so.txt

  5. #5
    Membre actif
    Inscrit en
    Février 2008
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 107
    Par défaut
    OK.
    Mais j'ai finalement fait cela avec la première solution avec qques modifications et cela fonctionne bien.
    Merci.

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/06/2014, 09h38
  2. [awk] Boucle sur un fichier pendant le traitement d'un autre fichier
    Par boubouboy dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 20/06/2014, 09h22
  3. [JProgressBar] Afficher barre d'attente pendant traitement
    Par Regis.C dans le forum Composants
    Réponses: 10
    Dernier message: 02/09/2005, 16h43
  4. Compression de fichiers
    Par BilTCD dans le forum Windows
    Réponses: 2
    Dernier message: 03/08/2005, 14h40

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