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 :

printf et le format de la virgule


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 162
    Par défaut printf et le format de la virgule
    bonjour,

    J'essaie d'effectuer la troncature d'un nombre issue d'un calcul. Dans tous ces calculs la virgule est sous la forme d'un point et ca marche très bien. Mais lors du printf il demande un virgule sous forme de virgule m'obligeant à effectuer une pirouette

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    d1=$( grep toto monfichier | awk ' {printf $1}' | sed -e "s/\./,/g" )
    d12=$(printf %f $d1 | sed -e "s/,/./g")
    Est ce du à mon environnement en français et que puis je faire pour éviter cette pirouette et faire ça en une seule étape.

    Merci

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 484
    Par défaut
    Citation Envoyé par Erlen Voir le message
    Est ce du à mon environnement en français et que puis je faire pour éviter cette pirouette et faire ça en une seule étape. Merci
    C'est possible, en effet. Est-ce que « export LC_NUMERIC=C » arrangerait les choses ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    faudrait voir le fichier, a priori :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d1=$(awk '/toto/{sub(",",".",$1); print $1}' fichier)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d1=$(awk '/toto/{printf("%.2f\n",$1)}' fichier)
    grep | awk | sed et un petit cut...?

    ---
    tuto awk
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Expert confirmé

    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
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ A=21.5555
     
    $ printf "%.2f\n" "${A}"
    bash: printf: 21.5555: nombre non valable
    0,00
     
    $ printf "%.2f\n" "${A/./,}"
    21,56
     
    $

  5. #5
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 124
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 124
    Par défaut
    Yep !
    Citation Envoyé par zipe31 Voir le message
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ A=21.5555
     
    $ printf "%.2f\n" "${A}"
    bash: printf: 21.5555: nombre non valable
    0,00
     
    $ printf "%.2f\n" "${A/./,}"
    21,56
     
    $
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ A=0.5678
     
    $ printf "%02.3f\n" "${A/./,}"
    0,568

    Je m'attendais à 00,568. Pas vous ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 162
    Par défaut
    Merci pour vos réponse rapide

    Citation Envoyé par Obsidian Voir le message
    C'est possible, en effet. Est-ce que « export LC_NUMERIC=C » arrangerait les choses ?
    Oui, c'est exactement ce que je cherchait. merci

    en ce qui concerne zipe31
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf "%.2f\n" "${A/./,}"
    21,56
    Le problème, c'est que je veux un point (raison de compatibilité) et ca m'oblige à faire une manip de plus.

    J'ai quand même du mal à comprendre. Dans mon script je fais des calculs avec un virgule sous la forme d'un point et j'ai pas de soucis sauf là.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/12/2014, 18h40
  2. [XL-2007] Problème de format de nombre à virgule dans une liste de validation
    Par basto dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 16/05/2014, 15h03
  3. Réponses: 5
    Dernier message: 16/05/2014, 14h38
  4. Réponses: 3
    Dernier message: 03/08/2007, 09h06
  5. [reporting service] String.Format avec 4 virgules
    Par oolon dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/03/2007, 10h08

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