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 :

Opérations arithmétiques en bash


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Par défaut Opérations arithmétiques en bash
    Bonjour à tous,

    J'ai un fichier toto qui contient:

    10 4.6728126488E+00
    11 4.6626634808E+00
    12 4.6608688524E+00
    13 4.6612003315E+00
    14 4.6613837465E+00
    15 4.6610631523E+00
    16 4.6606781515E+00
    17 4.6604991048E+00

    Je voudrais créer un script qui permet de prendre toutes les valeurs de la deuxième colonne et de multiplier chacun des nombres par une valeur (0.529) et créer un deuxième fichier avec les nouvelles valeurs:

    10 2.....
    11 2....
    12 2....

    etc...

    Pour le moment j'ai essayer avec un :

    awk < toto '{ print $1,$2 }' > fichier_output

    Mais je ne sais pas vraiment comment récuper la deuxième colonne et la multiplier par 0.529

    D'avance un tout grand merci.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
     
    #set -x
     
    while read nl val
     do
       val=$(bc <<< "($val) * 0.529")
       echo "$nl $val"
    done < fichier.in > fichier.out
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    cat fichier.out
    10 2.47191789126
    11 2.46654898139
    12 2.46559962296
    13 2.46577497541
    14 2.46587200194
    15 2.46570240761
    16 2.46549874219
    17 2.46540402648
    et en awk
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '$2=$2 * 0.529 {print $1,$2}' fichier.in > fichier.out
    fonctionne, mais n'est peut-être pas correct...
    ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Par défaut
    Merci beaucoup pour cette réponse très rapide N_BaH,

    Ça marche nikel sauf le deuxième exemple qui limite le nombre de décimale.

    Encore merci

    PS: Au fait dans le premier exemple si je veux faire une division avec / à la place de * ça ne marche pas?? (j'ai évidement résolu le problème en multipliant par l'inverse du nombre mais c'est étrange).

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    Citation Envoyé par Tanakaa
    Au fait dans le premier exemple si je veux faire une division avec / à la place de * ça ne marche pas?? (j'ai évidement résolu le problème en multipliant par l'inverse du nombre mais c'est étrange).
    Quel est le résultat affiché, et quel résultat devrait l'être ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Par défaut
    J'ai un résultat vide. Mais bon c'est pas vraiment grave puisque j'ai pu résoudre le problème.

    Encore merci.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    Pour ma part, tant en bash qu'en awk, j'obtiens un résultat pour la division...mais pas le même
    ???
    il apparaît que le résultat de la commande awk est faux...
    ?

    précision :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val=$(bc <<< "scale=10; ($val) * 0.529") # 10 ou ce que tu veux comme nombre de décimales
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    il apparaît que le résultat de la commande awk est faux...
    ?
    Le résultat n'est pas faux mais sans doute mal formaté.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LANG=C awk '{$2=sprintf("%1.11f", $2*0.529)}1' infile

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    Bonsoir ripat,

    Ah, oui ! C'est quand même autre chose que mon bricawklage...

    merci beaucoup.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Opération arithmétique dans un select
    Par Christophe Charron dans le forum Requêtes
    Réponses: 3
    Dernier message: 21/03/2007, 11h19
  2. Faire des opérations réelles avec bash ?
    Par Michaël dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 01/09/2006, 15h59
  3. Réponses: 5
    Dernier message: 17/06/2006, 12h33
  4. Opération arithmétique de String à Float
    Par Shiryu57 dans le forum Langage
    Réponses: 4
    Dernier message: 13/03/2006, 10h22
  5. [VAL] Opérations arithmétiques
    Par WriteLN dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/05/2005, 09h59

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