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

Linux Discussion :

Problème pour faire un calcul


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 46
    Points : 26
    Points
    26
    Par défaut Problème pour faire un calcul
    Rebonjour à vous tous. Je suis de retour. J'ai encore une fois un petit problème. Je dois enregistrer la taille d'un fichier dans un document et ensuite lorsque l'usager ajoute de nouvelles adresses emails, je dois trouver le pourcentage d'augmentation du fichier.

    Pour trouver la grosseur du fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    taillefichier= ls -la $FILE | awk {print $5}
    Après avoir trouver la grosseur du fichier, je l'enregistre. Pour la encore tout va bien. Lorsque je redémarre mon programme et que j' ajoute de nouvelles adresses emails, la taille du fichier augmente donc et je doit trouver la pourcentage d'augmentation de ce fichier mais je sais juste pas comment faire. Merci encore de votre aide.

  2. #2
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Ça doit le faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    taillefichier=`wc -c < $FILE`
    .../...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Nouvelletaillefichier=`wc -c < $FILE`
     
    printf %.2f%% $(echo "scale=10; ($Nouvelletaillefichier/$taillefichier-1)*100" | bc -l)
    Loi de Murphy:
    La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
    La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
    Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.

  3. #3
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    Merci beaucoup pour ton aide mais c'est bien beau d'avoir la solution mais j'aimerais comprendre se que fait exactement ce code. Comme par exemple que fait le "wc", "bc", "scale",ect. Et à quoi sert aussi le -1 dans le calcul après taillefichier et avant la multiplication. Merci de votre aide encore une fois

  4. #4
    Membre chevronné
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Points : 2 244
    Points
    2 244
    Par défaut
    Il faut être un peu autonome aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    zsh$ man wc
    zsh$ man bc
    "Voyager, c'est découvrir que tout le monde a tort", Aldous Huxley
    "Less is more" Ludwig Mies Van Der Rohe

    Risk & Security Mgmt

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 717
    Points : 31 028
    Points
    31 028
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par carlou135 Voir le message
    Et à quoi sert aussi le -1 dans le calcul après taillefichier et avant la multiplication.
    Tu vois que ça sert de ne pas dormir à l'école...
    Le taux d'augmentation c'est la différence entre la nouvelle taille et l'ancienne par rapport à l'ancienne taille. Donc c'est
    (nouvelleTaille - ancienneTaille) / ancienneTaille

    Tu simplifies cette fraction avec "ancienneTaille" et ça te donne "nouvelleTaille/ancienneTaille - 1"

    Le pourcentage c'est le taux * 100
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    C'est pas tellement le calcul mathématique qui me donnait du fils à retorde mais le coté code bash. Mais la j'ai un nouveau problème.

    Voici le code que j'ai créé avec votre aide:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    StatistiqueTailleCarnet() {
    anciennetaillecarnet=`awk '{print $1}' taillecarnet`
    nouvelletaillecarnet=`ls -la car | awk '{print $5}'`
     
    printf %.2f%% $(echo "scale=10; ($nouvelletaillecarnet/$anciennetaillecarnet-1)*100" | bc -l)
     
    echo $nouvelletaillecarnet *> taillecarnet
    }
    Je recois cette erreur quand j'ajoute de nouveau membre dans le carnet et que je regarde le pourcentage d'augmentation du fichier:

    "gestioncarnetmail: line 64: printf: 40.9638554200: invalid number
    0,00%"

    J'ai passé plusieurs heures à regarder pour trouver l'erreur mais en vint. Merci encore une fois de votre aide.

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 717
    Points : 31 028
    Points
    31 028
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par carlou135 Voir le message
    C'est pas tellement le calcul mathématique qui me donnait du fils à retorde mais le coté code bash. Mais la j'ai un nouveau problème.

    Voici le code que j'ai créé avec votre aide:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    StatistiqueTailleCarnet() {
    anciennetaillecarnet=`awk '{print $1}' taillecarnet`
    nouvelletaillecarnet=`ls -la car | awk '{print $5}'`
     
    printf %.2f%% $(echo "scale=10; ($nouvelletaillecarnet/$anciennetaillecarnet-1)*100" | bc -l)
     
    echo $nouvelletaillecarnet *> taillecarnet
    }
    Je recois cette erreur quand j'ajoute de nouveau membre dans le carnet et que je regarde le pourcentage d'augmentation du fichier:

    "gestioncarnetmail: line 64: printf: 40.9638554200: invalid number
    0,00%"

    J'ai passé plusieurs heures à regarder pour trouver l'erreur mais en vint. Merci encore une fois de votre aide.
    T'aurais essayé puis (ce que j'ai fait à l'instant) t'aurais pas mis plusieurs heures pour comprendre que printf ne veut pas de virgule à l'anglaise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf %.2f%% $(echo "scale=10; ($nouvelletaillecarnet/$anciennetaillecarnet-1)*100" | bc -l |sed -e "s/./,/g")
    Ou plus simplement (pour éviter un tas de processus inutiles)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "$nouvelletaillecarnet $anciennetaillecarnet" |awk '{printf("%.2f%%\n", ($1 / $2 - 1) * 100)}'
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    Merci beaucoup à vous pour votre solution. Sa marche numéro un. Je sais que je devrait tester avant mais étant un débutant en bash, j'ai pas ces réflexes. Merci encore beaucoup pour votre aide.

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/06/2015, 21h48
  2. Réponses: 5
    Dernier message: 24/09/2005, 20h31
  3. problème pour faire des blocs
    Par tinkye_winkye dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 04/01/2005, 14h13
  4. [SQL] problème pour faire ma requete
    Par seb.briet dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/12/2004, 16h51
  5. [FLASH MX2004] Problème pour faire un bouton play
    Par melanie075 dans le forum Flash
    Réponses: 13
    Dernier message: 16/12/2004, 22h55

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