1. #1
    Membre averti
    Profil pro
    Inscrit en
    décembre 2008
    Messages
    846
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2008
    Messages : 846
    Points : 407
    Points
    407

    Par défaut [CSH] Trouver l'ordre de grandeur d'une variable

    Bonjour,

    Afin de faire des multiplots en boucle, j'essaye d'automatiser certaines commandes d'un programme SIG (gmt). Pour ce faire, j'aurais besoin en CSH de sortir l'ordre de grandeur de variables:

    ex:

    j'aimerais sortir: j'aimerais avoir: etc...

    Trouve pas trop d'aide sur le net..

    merci.
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    7 442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 7 442
    Points : 22 555
    Points
    22 555

    Par défaut

    Avec sed :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "x=1.51588412525e-14\nx=2.845556655e09" | sed 's:^.*\(e-\{0,1\}[0-9]\{1,\}\)$:1\1:'
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

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

    Informations forums :
    Inscription : février 2008
    Messages : 4 807
    Points : 12 428
    Points
    12 428

    Par défaut

    Bonjour,

    mais pourquoi csh ?!
    personne n'utilise csh !
    c'est archaïque.
    c'est pas maniable.
    ça colle aux doigts.
    .
    N'oubliez pas de consulter la FAQ et les cours shell

  4. #4
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    novembre 2010
    Messages
    2 275
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : novembre 2010
    Messages : 2 275
    Points : 6 091
    Points
    6 091

    Par défaut

    salut,

    il semblerait qu'on puisse s'en sortir en changeant le point pour une virgule et en transitant par printf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ printf "%.0e\n" `echo "1.51588412525e-14" | tr . ,`
    2e-14
    $ printf "%.0e\n" `echo "2.845556655e09" | tr . ,`
    3e+09
    ou encore Perl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo "1.51588412525e-14" | perl -ne 'printf "%.0e\n", $_'
    2e-14
    $ echo "2.845556655e09" | perl -ne 'printf "%.0e\n", $_'
    3e+09
    edit : en fait de point ou de virgule c'est même plutôt une question de locale ($LC_NUMERIC)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ LANG=C printf "%.0e\n" "2.845556655e09"
    3e+09
    Avant donc que d'écrire, apprenez à penser.
    Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure.
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément.
                                                        - Nicolas Boileau, L'Art poétique

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    décembre 2008
    Messages
    846
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2008
    Messages : 846
    Points : 407
    Points
    407

    Par défaut

    Citation Envoyé par al1_24 Voir le message
    Avec sed :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "x=1.51588412525e-14\nx=2.845556655e09" | sed 's:^.*\(e-\{0,1\}[0-9]\{1,\}\)$:1\1:'
    super merci

    mais j'ai du mal à bien formuler la commande sed dans mon cas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed [-n] [-e commande] [-f fichier de commandes] [fichier]
    J'ai une variable de la forme: $z[1] dont je veux tirer son ordre de grandeur dans $MO

    j'essaye des trucs au pif:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $z[1] sed 's:^.*\(e-\{0,1\}[0-9]\{1,\}\)$:1\1:' $MO
    mais rien ne marche


    Merci pour toute aide

    PS: si j'utilise CSH au lieu des B shell c'est uniquement car j'interviens sur des programmes déjà créés.
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    7 442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 7 442
    Points : 22 555
    Points
    22 555

    Par défaut

    Avec un shell POSIX, j'écrirais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MO=`echo $z[1] | sed 's:^.*\(e-\{0,1\}[0-9]\{1,\}\)$:1\1:'`
    Avec bash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MO=$(sed 's:^.*\(e-\{0,1\}[0-9]\{1,\}\)$:1\1:' <<< $z[1])
    csh, je ne maîtrise pas.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    décembre 2008
    Messages
    846
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2008
    Messages : 846
    Points : 407
    Points
    407

    Par défaut

    @ BufferBob

    CSH ne trouve pas la commande $ ..


    @ al1_24

    Les deux commandes ne semblent pas fonctionner en CSH effectivement ..

    pas moyen avec awk ?
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

  8. #8
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    novembre 2010
    Messages
    2 275
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : novembre 2010
    Messages : 2 275
    Points : 6 091
    Points
    6 091

    Par défaut

    Citation Envoyé par Newenda Voir le message
    CSH ne trouve pas la commande $ ..
    normal, c'est le prompt

    edit: avec awk ça marche aussi effectivement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "2.845556655e09" | awk '{printf("%.0e\n", $1)}'
    3e+09
    Avant donc que d'écrire, apprenez à penser.
    Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure.
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément.
                                                        - Nicolas Boileau, L'Art poétique

  9. #9
    Expert éminent Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    décembre 2012
    Messages
    2 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : décembre 2012
    Messages : 2 426
    Points : 6 746
    Points
    6 746

    Par défaut

    Bonjour,

    Peut-être un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set MO=`echo $z[1] | sed -e 's/[0-9.]*/1/'`
    Cordialement.

  10. #10
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    juillet 2004
    Messages
    2 433
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : juillet 2004
    Messages : 2 433
    Points : 3 953
    Points
    3 953

    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "scale=1;l(2.845556655e09) / l(10)" | sed -r 's/([0-9])e([0-9])/\1*10^\2/' | bc -l
    9.4
    c'est l'ordre de grandeur.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : avril 2008
    Messages : 1 657
    Points : 4 376
    Points
    4 376

    Par défaut

    Citation Envoyé par BufferBob Voir le message
    il semblerait qu'on puisse s'en sortir en changeant le point pour une virgule et en transitant par printf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ printf "%.0e\n" `echo "1.51588412525e-14" | tr . ,`
    2e-14
    $ printf "%.0e\n" `echo "2.845556655e09" | tr . ,`
    3e+09
    Attention! Les spécifications indiquent clairement que le résultat attendu est 1e-14 (et non 2e-14) et 1e+09 (et non 3e+09).

    Je plussoie donc la réponse de disedorgue pour csh:
    Citation Envoyé par disedorgue Voir le message
    Peut-être un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set MO=`echo $z[1] | sed -e 's/[0-9.]*/1/'`

  12. #12
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    novembre 2010
    Messages
    2 275
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : novembre 2010
    Messages : 2 275
    Points : 6 091
    Points
    6 091

    Par défaut

    Citation Envoyé par jack-ft Voir le message
    le résultat attendu est 1e-14 (et non 2e-14) et 1e+09 (et non 3e+09).
    Je plussoie donc la réponse de disedorgue pour csh:
    effectivement, bien vu (ou c'est moi qui vois moyen bien possiblement aussi )
    Avant donc que d'écrire, apprenez à penser.
    Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure.
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément.
                                                        - Nicolas Boileau, L'Art poétique

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    décembre 2008
    Messages
    846
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2008
    Messages : 846
    Points : 407
    Points
    407

    Par défaut

    Merci à vous, toutes vos réponses m'ont appris un truc en plus.
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

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

Discussions similaires

  1. Ordre de grandeur d'une BDD
    Par eprevot dans le forum MySQL
    Réponses: 15
    Dernier message: 04/11/2011, 11h08
  2. format ordre des modalités d'une variable
    Par eamoros dans le forum SAS Base
    Réponses: 2
    Dernier message: 10/02/2009, 19h25
  3. Ordre de grandeur d'une fonction
    Par Bool1988 dans le forum Caml
    Réponses: 7
    Dernier message: 05/09/2007, 16h38
  4. Trouver le type d'une variable
    Par Melvine dans le forum Linux
    Réponses: 16
    Dernier message: 07/06/2006, 10h59
  5. [langage] trouver une variable dans une autre
    Par BEAUJAULT dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2004, 16h04

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