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 :

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


Sujet :

Shell et commandes GNU

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    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
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    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
    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,

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

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

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    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

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    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
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    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 confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    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
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    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

  9. #9
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    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 : 4 286
    Points : 12 742
    Points
    12 742
    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 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    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 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 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
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    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 )

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    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, 10h08
  2. format ordre des modalités d'une variable
    Par eamoros dans le forum SAS Base
    Réponses: 2
    Dernier message: 10/02/2009, 18h25
  3. Ordre de grandeur d'une fonction
    Par Bool1988 dans le forum Caml
    Réponses: 7
    Dernier message: 05/09/2007, 15h38
  4. Trouver le type d'une variable
    Par Melvine dans le forum Linux
    Réponses: 16
    Dernier message: 07/06/2006, 09h59
  5. [langage] trouver une variable dans une autre
    Par BEAUJAULT dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2004, 15h04

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