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

Modifier les arguments d'une boucle for [Résolu][ksh] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 07-04-2011 à 14:27:28    

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
Reply

Marsh Posté le 07-04-2011 à 14:27:28   

Reply

Marsh Posté le 07-04-2011 à 16:57:06    

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

Reply

Marsh Posté le 08-04-2011 à 09:07:26    

Une SunOS 5.10...

Reply

Marsh Posté le 08-04-2011 à 11:16:25    

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.

Reply

Marsh Posté le 11-04-2011 à 14:20:06    

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 !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed