Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1622 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [Résolu][ksh] Modifier les arguments d'une boucle for

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu][ksh] Modifier les arguments d'une boucle for

n°1273234
NegroTruc
Posté le 07-04-2011 à 14:27:28  profilanswer
 

Bonjour à tous,
 
Pour un script d'analyse de logs, j'ai besoin de trier des fichiers de logs, par mois, selon leur date.
En gros, logs de moins d'un moins, logs de un à deux mois...
 
Pour cela, je veux une variable contenant la date d'il y a 1, 2 ou 3 mois sous la forme AAAMMJJ.
Cela fonctionne, mais pour cela j'utilise la fonction date avec l'option -d. Or j'ai changé de machine et cette option n'existe pas sur celle-ci.
 
J'ai alors modifié mon script de façon à faire sans cette option. J'obtiens ceci :
 

Code :
  1. DATE_1MOIS=$((`date +%Y%m%d` - 100))
  2. #C'est sensé être la date d'il y a deux mois, mais j'ai poussé à 4 pour obtenir mon cas particulier (décembre)
  3. DATE_2MOIS=$((`date +%Y%m%d` - 400))
  4. # Idem DATE_2MOIS pour mon deuxième cas particulier
  5. DATE_3MOIS=$((`date +%Y%m%d` - 500))
  6. for i in $DATE_1MOIS $DATE_2MOIS $DATE_3MOIS
  7. do
  8.         echo "Avant : $i"
  9.         # si la date est de forme AAAA00JJ soit avec un mois égal a zéro
  10.         if [ `echo $i | cut -c 5-6` -eq 0 ]
  11.         then
  12.                 # On soustrait 10000 pour avoir l’année précédente...
  13.                 # ... et on ajoute 1200 pour atteindre le mois de décembre
  14.                 i=$(($i - 10000 + 1200))
  15.         fi
  16.         # si la date est de forme AAAAMMJJ avec le mois supérieur a 12
  17.         if [ `echo $i | cut -c 5-6` -gt 12 ]
  18.         then
  19.                 # On soustrait 8800 pour obtenir le mois entre 01 et 12 correspondant.
  20.                 i=$(($i - 8800))
  21.         fi
  22.         echo "fin de boucle :$i"
  23. done
  24. echo "Termine :"
  25. echo $DATE_1MOIS
  26. echo $DATE_2MOIS
  27. echo $DATE_3MOIS


 
Ma boucle for fonctionne bien, mais je n'arrive pas à sortir le résultat... Je ne sais pas si on peut modifier l'argument de la boucle pour qu'il soit utilisable plus tard. J'ai cherché sur le net, mais je n'ai rien trouvé.
 
Ma question : y'a-t-il une solution pour sortir mes trois argument de ma boucle ? Sinon, comment faire autrement ?
 
Merci de votre aide !  :)


Message édité par NegroTruc le 11-04-2011 à 14:27:25
mood
Publicité
Posté le 07-04-2011 à 14:27:28  profilanswer
 

n°1273251
Wobak
Come get some !
Posté le 07-04-2011 à 16:57:06  profilanswer
 

Tu es passé sur quoi comme machine pour ne plus avoir l'option -d sur date ?

n°1273335
NegroTruc
Posté le 08-04-2011 à 09:07:26  profilanswer
 

Une SunOS 5.10...

n°1273373
Wobak
Come get some !
Posté le 08-04-2011 à 11:16:25  profilanswer
 

Pour moi le plus simple : utiliser perl :
perl -e '($a,$b,$c,$d,$e,$f,$g,$h,$i)=localtime(time-86400*5);printf"%d%02d%02d\n",$f+1900,$e+1,$d'
 
86400*5 représentant le nombre de jours de décalage.

n°1273745
NegroTruc
Posté le 11-04-2011 à 14:20:06  profilanswer
 

Au final, j'ai utilisé ma boucle for en passant les dates par un fichier texte temporaire.  
Mais niveau propreté par rapport à ta commande Perl, c'est le Grand Canyon... ^^"
 
Je vais triturer ta commande dans tous les sens pour voir, ça peut me servir ailleurs, pour d'autres formats de dates. :)
 
Merci !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [Résolu][ksh] Modifier les arguments d'une boucle for

 

Sujets relatifs
[Bash] Modifier une partie d'une variable mais pas tout !![Centos]Modifier l'envoi des logs
modifier drivers scanner open sourceModifier Grub 1.98 / menu.lst ne marche pas
copier un fichier sans modifier sa date de creationModifier fichier avec putty
[Bash] Boucle While qui ne sort pasproblème, kdm en boucle [Résolu]
passage parametre à boucle for each en xslt 
Plus de sujets relatifs à : [Résolu][ksh] Modifier les arguments d'une boucle for


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR