Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/05/2011, 11h53   #1
Candidat au titre de Membre du Club
 
Inscription : février 2008
Messages : 96
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 96
Points : 14
Points : 14
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.
patgabjoe est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 19/05/2011, 12h33   #2
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
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 :
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 :
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
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/05/2011, 13h50   #3
Candidat au titre de Membre du Club
 
Inscription : février 2008
Messages : 96
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 96
Points : 14
Points : 14
La 2ème solution em donne ceci :

Code :
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 ?
patgabjoe est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 19/05/2011, 14h42   #4
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
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 :
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 :
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 :
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
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/05/2011, 15h25   #5
Candidat au titre de Membre du Club
 
Inscription : février 2008
Messages : 96
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 96
Points : 14
Points : 14
OK.
Mais j'ai finalement fait cela avec la première solution avec qques modifications et cela fonctionne bien.
Merci.
patgabjoe est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h39.


 
 
 
 
Partenaires

Hébergement Web