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 :

Formatage numérique avec awk ou gawk


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 160
    Points : 80
    Points
    80
    Par défaut Formatage numérique avec awk ou gawk
    Bonjour,

    Voici un formatage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Perform 
     
    -17     
     
    -53,45  
     
    -0,6    
     
    -6,94   
     
    -17,95  
     
    -11,04  
     
    178,19
    obtenu avec cet extrait de code contenu dans un gawk (la colonne Perform : c'est la variable var5) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
        if ($6==0)
            var5="nan"
        else
            {
    #m02    var5=(100*($5/$6 -1));                                          #m02
            var5=int((10000*($5/$6 -1)))/100;                               #m02
            if (100*($5/$6 -1) < var3) {var2="c"};
            if (100*($5/$6 -1) > var4) {var2="d"} 
    	    }
        fi
     
        print $1";"$8";"$2";"$3";"$4";"$5";"$6";"$7";"\
        $4*$5";"$4*$6";"$4*$5-$4*$6";"var5";"\
        $9";"$10";"$11";"$12";"\
        $13";"$14";"$15";"$16";"$17";"$18";"\
        $19";"$20";"$21";"$22";"$23";"$24";"\
        var1";"var2
     
    } ' ftmp37.csv > fedition.csv
    Comment formater avec arrondi à deux chiffres après la virgule ? (c'est fait : modification m02)

    en complétant à droite par des zéros ? (( la première ligne -17 deviendrait -17,00

    en alignant les virgules ?
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    -17,00 (première ligne)
    178,19 (dernière ligne)

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    Bonjour

    On remplace print (affiche), par printf (affiche avec format).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ cat afac_awkprintf.txt
    Perform
    -17
    -53,45
    -0,6
    -6,94
    -17,95
    -11,04
    178,19
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ awk '{printf("%7.2f\n",$1);}' afac_awkprintf.txt
       0.00
     -17.00
     -53.00
      -0.00
      -6.00
     -17.00
     -11.00
     178.00
    Attention à réserver suffisamment de places pour tous les chiffres et signes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ awk '{printf("%5.2f\n",$1);}' afac_awkprintf.txt
     0.00
    -17.00
    -53.00
    -0.00
    -6.00
    -17.00
    -11.00
    178.00
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ awk '{printf("%15.2f\n",$1);}' afac_awkprintf.txt
               0.00
             -17.00
             -53.00
              -0.00
              -6.00
             -17.00
             -11.00
             178.00
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre régulier Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 160
    Points : 80
    Points
    80
    Par défaut
    Merci Flodelarab

  4. #4
    Membre régulier Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 160
    Points : 80
    Points
    80
    Par défaut
    Remarques :
    1/ Les 3 awk ne reconnaissent pas la virgule mais le point
    2/ Pourquoi avec le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ awk '{printf("%5.2f\n",$1);}' afac_awkprintf.txt
    ...
    178,19
    le 1 du 178 n'est-il pas tronqué ?

  5. #5
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    1/ J'ai complètement zappé que l'entrée utilisait la virgule.
    Pour avoir un traitement naturel de la virgule, il faut utiliser la locale.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    awk --use-lc-numeric '{printf("%7.2f\n",$1);}' afac_awkprintf.txt
       0,00
     -17,00
     -53,45
      -0,60
      -6,94
     -17,95
     -11,04
     178,19
    Ou, sinon, tu peux la remplacer avant de traiter.

    2/ L'information n'est pas tronquée. Elle déborde.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ printf "|%10s|\n" 123 1468 123456789 1234567890123 123 157
    |       123|
    |      1468|
    | 123456789|
    |1234567890123|
    |       123|
    |       157|
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  6. #6
    Membre régulier Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 160
    Points : 80
    Points
    80
    Par défaut
    Bien reçu.
    Merci Flodelarab.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 17/02/2012, 11h57
  2. pb formatage d'un fichier txt avec awk ou SHELL en géneral
    Par ammah dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 26/09/2008, 15h25
  3. problème formatage de fichier avec awk
    Par nenekes dans le forum Shell et commandes GNU
    Réponses: 16
    Dernier message: 02/11/2006, 12h53
  4. Formatage de fichier avec awk
    Par sam56 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 12/10/2006, 11h04
  5. Problème sur une cmd avec AWK
    Par OrangeBud dans le forum Linux
    Réponses: 3
    Dernier message: 02/06/2004, 10h51

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