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 :

Script qui multiplie automatiquement par deux le résultat final


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 97
    Points : 44
    Points
    44
    Par défaut Script qui multiplie automatiquement par deux le résultat final
    bonjour,

    j'ai (avec la participation de quelques uns d'entre vous) créé le script ci-dessous qui doit me remonter l'écart de jours entre deux dates données, par contre la finalité serait que ce résultat soit multiplié par deux, mais comment faire ?

    Merci de votre aide .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #!/bin/bash
     
    dateDiff(){
        d1=$(date -d "$1" +%s)
        d2=$(date -d "$2" +%s)
        result=$(date -d "1970-01-01 UTC $((d1-d2-86400)) seconds" +"%j")
        echo ${result}
    }
     
    if [ $# -ge 2 ]; then # Si deux paramètres passés au script
        d1=$1
        d2=$2
    else
        echo "Saisir les dates d1 et d2 :"
        read d1
        read d2
    fi
     
    dateDiff $d1 $d2

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Bonjour,

    bah
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $(($(datediff $d1 $d2) * 2))
    !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 97
    Points : 44
    Points
    44
    Par défaut Script qui multiplie automatiquement par deux le résultat final
    J'ai essayé mais cela ne fonctionne pas. (ci-dessous le script modifié)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #!/bin/bash
     
    dateDiff(){
        d1=$(date -d "$1" +%s)
        d2=$(date -d "$2" +%s)
        result=$(date -d "1970-01-01 UTC $((d1-d2-86400)) seconds" +"%j")
        echo $(($(datediff $d1 $d2) * 2))
    }
     
    if [ $# -ge 2 ]; then # Si deux paramètres passés au script
        d1=$1
        d2=$2
    else
        echo "Saisir les dates d1 (date + récente) et d2 (date + ancienne) au format aaaammjj :"
        read d1
        read d2
    fi
     
    dateDiff $d1 $d2

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    mais non !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #!/bin/bash
     
    dateDiff(){
        d1=$(date -d "$1" +%s)
        d2=$(date -d "$2" +%s)
    # ça c'est le résultat que doit afficher la fonction
        echo $(date -d "1970-01-01 UTC $((d1-d2-86400)) seconds" +"%j")
    }
     
    # Si _moins de deux_ paramètres sont passés au script
    if [ $# -lt 2 ]
    then
        echo "Saisir les dates d1 (date + récente) et d2 (date + ancienne) au format aaaammjj :"
        read d1
        read d2
    # il faudrait peut-être vérifier le format des données entrées par l'utilisateur
    fi
     
    #
    echo $(($(dateDiff $1 $2) *2))
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 97
    Points : 44
    Points
    44
    Par défaut Script qui multiplie automatiquement par deux le résultat final
    Le format est le suivant ==> aaaammjj, mais j'ai tout le temps le même écart entre les jours recherchés, c'est à dire 730.

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash
     
    if [ $# -lt 2 ]
    then
       echo "Saisir les dates d1 (date + récente) et d2 (date + ancienne) au format aaaammjj :"
       read d1
       read d2
       set -- $d1 $d2 
    fi
    echo $(( ( $(date -d "$1" +%s) - $(date -d "$2" +%s) ) / 86400 *2))
    Le format est le suivant ==> aaaammjj
    si je rentre "tarte à la crème", penses-tu que le format des données sera encore 'aaaammjj' ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 97
    Points : 44
    Points
    44
    Par défaut Script qui multiplie automatiquement par deux le résultat final
    Bonjour N_BaH,

    Merci de ton aide précieuse, je clos le post.

    Bonne journée.

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 97
    Points : 44
    Points
    44
    Par défaut script qui multiplie par deux mon resultat final
    Bonjour,

    j'ai crée un script avec l'aide de certains d'entre vous (merci à eux d'ailleurs une fois de plus) qui compte le nombre de jours entre deux dates (script ci-dessous)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #!/bin/bash
     
    dateDiff(){
        d1=$(date -d "$1" +%s)
        d2=$(date -d "$2" +%s)
        result=$(date -d "1970-01-01 UTC $((d1-d2-86400)) seconds" +"%j")
        echo ${result}
    }
     
    if [ $# -ge 2 ]; then # Si deux paramètres passés au script
        d1=$1
        d2=$2
    else
        echo "Saisir les dates d1 et d2 :"
        read d1
        read d2
    fi
     
    dateDiff $d1 $d2

    Ma question est la suivant, j'aimerai savoir comment faire pour multiplier le resultat par deux car j'ai deux fichiers par jour?

    Merci de votre aide par avance...

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Bonjour.
    Tu avais déjà posé la question naguère et N_BaH avait déjà donné la réponse:
    http://www.developpez.net/forums/d12...l/#post6949321

    L'aurais-tu oublié?

  10. #10
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 97
    Points : 44
    Points
    44
    Par défaut script qui multiplie par deux mon resultat final
    Jack, le problème c'est que pour les même dates le script de N_BAH me remonte 7 (écart entre 20121007 et 20121001) et que moi et je te le répète en rentrant les mêmes dates et avec le même script il me remonte 6 .

    tu sais d’où vient le problème, ce n'est pas le paramètre 86400 qui pose problème??

    Merci de ton aide ci-dessous le script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #!/bin/bash
     
    dateDiff(){
        d1=$(date -d "$1" +%s)
        d2=$(date -d "$2" +%s)
        result=$(date -d "1970-01-01 UTC $((d1-d2-86400)) seconds" +"%j")
        echo ${result}
    }
     
    if [ $# -ge 2 ]; then # Si deux paramètres passés au script
        d1=$1
        d2=$2
    else
        echo "Saisir les dates d1 et d2 :"
        read d1
        read d2
    fi
     
    dateDiff $d1 $d2

  11. #11
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Bonjour.

    J'avoue que j'ai un peu de mal à suivre!

    Dans ton premier post de ce thread, tu demandes, à la fin:

    Citation Envoyé par bomonde Voir le message
    j'aimerai savoir comment faire pour multiplier le resultat par deux car j'ai deux fichiers par jour?
    Le lien que j'ai posté envoie précisément vers la réponse de N_BaH à cette question:
    Citation Envoyé par N_BaH Voir le message
    bah
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $(($(datediff $d1 $d2) * 2))
    !
    Puis tu me réponds:

    Citation Envoyé par bomonde Voir le message
    Jack, le pb c'est que pour les meme dates le script de N_BAH me remonte 7 (ecart entre 20121007 et 20121001) et que moi et je te le repete en rentrant les memes dates et avec le meme script il me remonte 6 .

    tu sais d'ou vient le pb, ce n'es tpas le parametre 86400 qui pose pb??
    Je n'étais pas du tout sur cette longueur d'onde ?!?!

    Y a-t-il un problème avec ton script ou celui de N_BaH?

    Àmha, il y a plutôt un problème de spécifications!
    (je vais finir par compter le nombre de fois où ça arrive sur ce forum!!!)

    Question: lorsque tu fournis comme dates le 1/01/2012 et le 2/01/2012, pour toi, combien doit-il y avoir de jours de différence?

    1 ou 2 ?

    Après, on discute sérieusement

  12. #12
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    je fais bêtement ce qu'on me demande, sans relire tout le script, et Bomonde ne fait pas beaucoup d'effort pour ap/comprendre l'écriture de script shell ! àmha.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/bash
     
    if [ $# -ge 2 ]; then # Si deux paramètres passés au script
        d1=$1
        d2=$2
    else
        echo "Saisir les dates d1 et d2 :"
        read d1
        read d2
    fi
     
    echo $(( ($(date -d "$d1" +%s)-$(date -d "$d2" +%s)) /86400 ))
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 97
    Points : 44
    Points
    44
    Par défaut Script qui multiplie automatiquement par deux le résultat final
    Bonjour,

    Tout d'abord merci de vos réponses, je pense ne pas avoir été clair dans ma formulation, en fait je dois créer un script qui compte le nombre de jour entre deux dates et multiplie le résultat par deux.
    Avec l'aide de certains d'entre vous j'ai réalisé le script (ci-dessous) qui je le pensais marchait bien car en entrant comme date 20120710 et 20120702 j’obtiens bien 16, par contre lorsque je rentre en paramètre 20121007 et 20121001 j'ai un résultat de 12 alors que je devrais avoir 14.
    Je ne sais pas si c'est un pb de date "flottante" ou de seconde (+1 ou -1) ou autre d'ailleurs, et j’avoue que je cale complétement sur ce problème.

    Merci de votre aide en espérant avoir été plus clair cette fois ci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash
     
    if [ $# -lt 2 ]
    then
       echo "Saisir les dates d1 (date + récente) et d2 (date + ancienne) au format aaaammjj :"
       read d1
       read d2
       set -- $d1 $d2
    fi
    echo $(( ( $(date -d "$1" +%s) - $(date -d "$2" +%s) ) / 86400 *2))

  14. #14
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Citation Envoyé par bomonde Voir le message
    par contre lorsque je rentre en paramètre 20121007 et 20121001 j'ai un résultat de 12 alors que je devrais avoir 14.
    Ben pour moi ça fait 12 aussi. Entre le 1er janvier et le 7 janvier, il y a bien 6 jours (et non 7), tout comme il y en a 8 entre le 2 juillet et le 10 juillet
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  15. #15
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Ben pour moi ça fait 12 aussi. Entre le 1er janvier et le 7 janvier, il y a bien 6 jours (et non 7), tout comme il y en a 8 entre le 2 juillet et le 10 juillet
    ça me paraît assez cohérent!

    C'est encore un problème de poteaux et d'intervalles!

    soit on compte les intervalles et il y a 6 jours entre le 1er et le 7 janvier (ce qui donne 12 après multiplication par 2)
    et il y a 8 jours entre le 2 et le 10 juillet (ce qui donne 16 après multiplication par 2)

    soit on compte le poteaux et il y a 7 jours du 1er au 7 janvier inclus (ce qui donne 14 après multiplication par 2)
    et il y a 9 jours du 2 au 10 juillet inclus (ce qui donne 18 après multiplication par 2)

    Mais, comme je n'ai pas eu de réponse à ma question sur les spécifications, et comme bomonde semble hésiter entre les 2 possibilités, il ne m'est guère possible de trancher! (d'ailleurs, ce n'est pas à moi de le faire! àmha, c'est à l'utilisateur du programme!)

  16. #16
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 97
    Points : 44
    Points
    44
    Par défaut Script qui multiplie automatiquement par deux le résultat final
    Bonjour,

    Merci de ton retour Jack, en fait je dois avoir pour les dates 20121007 à
    20121001 un résultat de 14 et pour les dates 20120710 à 20120702 un resultat de 16, je ne sais pas si la valeur 86400 pose un pb pour ce type de calcul en fait et ne pense pas que les poteaux ou intervalles rentre en compte dans ce type de calcul malheureusement, je cherche toujours mais vraiment pas evident.

    Merci de votre aide car la je sèche vraiment.

  17. #17
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    je dois avoir pour les dates 20121007 à 20121001 un résultat de 14
    et pour les dates 20120710 à 20120702 un resultat de 16
    qu'est-ce qui justifie cette différence de calcul ?
    il y a respectivement 6 et 8 jours d'écart entre les dates données en exemple; comment veux-tu que le premier fasse 14 quand il est multiplié par deux ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  18. #18
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par bomonde Voir le message
    Merci de ton retour Jack, en fait je dois avoir pour les dates 20121007 à 20121001 un résultat de 14 et pour les dates 20120710 à 20120702 un resultat de 16
    Si c'est effectivement le cas, il faut que tu nous expliques pourquoi!!!

    Quelle est la règle?

    (je n'ose plus dire "quelles sont les spécifications?" )

    Quel est le résultat attendu pour 20121006 20121001 ?
    Quel est le résultat attendu pour 20121005 20121001 ?
    Quel est le résultat attendu pour 20121004 20121001 ?
    Quel est le résultat attendu pour 20121003 20121001 ?
    Quel est le résultat attendu pour 20121002 20121001 ?
    Quel est le résultat attendu pour 20121001 20121001 ?

    Quel est le résultat attendu pour 20120709 à 20120702 ?
    Quel est le résultat attendu pour 20120708 à 20120702 ?
    Quel est le résultat attendu pour 20120707 à 20120702 ?
    Quel est le résultat attendu pour 20120706 à 20120702 ?
    Quel est le résultat attendu pour 20120705 à 20120702 ?
    Quel est le résultat attendu pour 20120704 à 20120702 ?
    Quel est le résultat attendu pour 20120703 à 20120702 ?
    Quel est le résultat attendu pour 20120702 à 20120702 ?

    Quel est le résultat attendu pour 20120806 à 20120703 ?
    Quel est le résultat attendu pour 20120805 à 20120703 ?
    Quel est le résultat attendu pour 20120804 à 20120703 ?
    Quel est le résultat attendu pour 20120803 à 20120703 ?
    Merci de votre aide car la je sèche vraiment.
    Aide-toi et le ciel t'aidera!
    Réponds aux questions et on verra ce qu'on peut faire pour ton cas...

    pour N_BaH: grillé

  19. #19
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 97
    Points : 44
    Points
    44
    Par défaut Script qui multiplie automatiquement par deux le résultat final
    Merci de ta réponse, en fait je n'ai que trois exemples car j'ai n'ai besoin de générer des fichiers que pour les trois dates ci-dessous:

    20121007 à 20121001 je dois avoir 14 (7x2)

    20120710 à 20120702 je dois avoir 16 (8x2)

    20120101 à 20110704 je dois avoir 364 (182 x2)

    Voila ..

  20. #20
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    POURQUOI ?

    tu es d'accord du 1 au 7 il y a 6 jours !
    du 2 au 10, il y a 8 jours !
    et 181 jours !

    alors, pourquoi 7 et 182 au lieu de 6 et 181, alors que 8 reste 8 ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Script qui sert à envoyer par email le mot de passe oublié d'un membre
    Par AirBen23 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 14/09/2012, 16h43
  2. Quel langage pour un script qui connecte automatiquement sur un site ?
    Par dephesity dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 13/08/2007, 11h11
  3. Réponses: 15
    Dernier message: 24/05/2007, 12h02
  4. Réponses: 8
    Dernier message: 16/03/2007, 16h43
  5. Script qui s'exécute deux fois ?
    Par ben53 dans le forum Langage
    Réponses: 1
    Dernier message: 29/01/2007, 15h56

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