Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/04/2018, à 19:30

julien01

Boucle et date

Bonsoir,
J'ai un peu de mal avec les boucles...

Si nous sommes le 11 avril 2018 (par exemple)
Comment faire une boucle qui est capable d'afficher ceci :

20180401
20180402
20180403
20180404
20180405
20180406
20180407
20180408
20180409
20180410
20180411

Je voudrai récupérer ceci dans une variable ($date) afin d'effectuer d'autres traitement derrière pendant la boucle (grep $date fichier.csv)

J'y arrive mais pas avec les premiers jours a cause du 0 devant le chiffre...

Merci pour votre aide smile

Hors ligne

#2 Le 27/04/2018, à 20:20

MicP

Re : Boucle et date

Bonjour

for maDate in 201804{01..11}
do
    grep $maDate fichier.csv
done

Dernière modification par MicP (Le 28/04/2018, à 11:09)

Hors ligne

#3 Le 27/04/2018, à 22:41

Watael

Re : Boucle et date

hmm.

en élaborant un peu plus :

#!/bin/bash

printf -v d '%(%-d)T'
printf -v Ym '%(%Y%m)T'

for ((i=1;i<=$d;i++))
do printf -v dD '%02d' $d
   grep "$Ym$dD" fichier
done

oui, j'aime bien printf big_smile


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#4 Le 27/04/2018, à 23:20

julien01

Re : Boucle et date

Par contre ça me sort ça wink

20180427;test
20180427;test
20180427;test
20180427;test
20180427;test
20180427;test
20180427;test
20180427;test
20180427;test
20180427;test
20180427;test
20180427;test
20180427;test
20180427;test
20180427;test
20180427;test
20180427;test
20180427;test
20180427;test
20180427;test
20180427;test
20180427;test
20180427;test
20180427;test
20180427;test
20180427;test
20180427;test

Hors ligne

#5 Le 27/04/2018, à 23:23

Watael

Re : Boucle et date

ah, m'est gourré !

do printf -v dD '%02d' $i

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#6 Le 27/04/2018, à 23:32

julien01

Re : Boucle et date

Ah super ça marche ! Grand merci !

Maintenant il me faut aussi la suite... C'est a dire une seconde boucle pour traiter le reste du mois. Dans mon exemple du 12 au 30 ! (on était le 11 dans mon exemple, et en sachant qu'en avril il n'y a que 30 jours, bien sur cela doit s'adapter au mois en cours donc le jour de fin de mois est variable).

Je vais essayer smile

Hors ligne

#7 Le 27/04/2018, à 23:45

Watael

Re : Boucle et date

date +%Y%m\ %d -d "${Ym}01 +1month -1day"

pour obtenir la date du dernier jour du mois au format YYYYMM dd.
tout n'est pas utile, c'est juste pour te montrer.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#8 Le 28/04/2018, à 00:35

julien01

Re : Boucle et date

Bon, j'ai adapté et ça marche. Mais par contre si nous sommes le 30, le lendemain sera = 01 , donc ça ne fonctionne plus puisqu'il reboucle de 01 a 30 tongue

annee=`date +%Y`
mois=`date +%m`
today=`date +%Y%m%d`
last=`date -d "$annee-$mois-01 +1 month -1 day" +%d`
demain=`date -d "$today +1 day" +%d`

for ((a=$demain;a<=$last;a++))
do printf -v dD '%02d' $a
   grep "$Ym$dD" fichier.txt
done

Hors ligne

#9 Le 28/04/2018, à 00:42

Watael

Re : Boucle et date

donc, il faudrait ajouter un test pour savoir si  "aujourd'hui" est "le dernier jour du mois", alors on n'exécute pas la boucle.

Dernière modification par Watael (Le 28/04/2018, à 00:42)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#10 Le 28/04/2018, à 00:47

julien01

Re : Boucle et date

\o/

Genre ?

if [ $today == $last ]
then
echo "nope"
else
for ((a=$demain;a<=$last;a++))
do printf -v dD '%02d' $a
   grep "$Ym$dD" fichier.txt
done
fi

Hors ligne

#11 Le 28/04/2018, à 07:39

MicP

Re : Boucle et date

Bonjour

…un test pour savoir si  "aujourd'hui" est "le dernier jour du mois"…

if [ $(date +%d -d "tomorrow") -lt $(date +%d) ]; then
    echo "On est le dernier jour du mois."
fi

Dernière modification par MicP (Le 28/04/2018, à 07:40)

Hors ligne

#12 Le 28/04/2018, à 16:00

julien01

Re : Boucle et date

Ça marche ! Merci !

Dernière modification par julien01 (Le 28/04/2018, à 16:40)

Hors ligne

#13 Le 07/05/2018, à 09:40

julien01

Re : Boucle et date

Bonjour !

Alors petit problème aujourd'hui sur ce bout de bash suivant...
Nous sommes le 7, la variable demain = 08

donc la boucle ne fonctionne pas car il prends ça pour de l'octale. Comment faire pour convertir mes variables jour $demain et $last en décimale ?

Et comment ensuite faire pour mettre un zero a gauche des jours de 1 a 9 ? smile


last=`date -d "$annee-$mois-01 +1 month -1 day" +%d`
demain=`date -d "$today +1 day" +%d`

for ((a=$demain;a<=$last;a++))
do printf -v dD '%02d' $a
   grep "$Ym$dD" fichier.txt
done

Hors ligne

#14 Le 07/05/2018, à 10:13

pingouinux

Re : Boucle et date

Bonjour,
Essaye en remplaçant +%d par +%_d ou +%e.

Hors ligne

#15 Le 07/05/2018, à 12:12

MicP

Re : Boucle et date

Bonjour

#!/bin/bash

last=$(date -d "$(date +%Y-%m-01) +1month -1day" +%d)
printf -v d '%(%-d)T'
printf -v Ym '%(%Y%m)T'

for ((i=d+1;i<=last;i++)); do
    printf -v dD '%02d' $i
    grep "$Ym$dD" fichier
done

Dernière modification par MicP (Le 07/05/2018, à 13:01)

Hors ligne