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 :

problème formatage de fichier avec awk


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut problème formatage de fichier avec awk
    bonjour a tous

    j ai un pb dans mon script que voici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    awk -F';' '
                {
                   NUMBER=$1
                   DATE=$2
                   PAY_KIND=$3
                   PSUM=$4*100
       printf ("%-15.15d\n",PSUM)
       printf ("%-15.15d\n",$4)
       print PSUM
       print $4
                }
    mon soucis c est au niveau du PSUM a savoir quand il prend la valeur de '$4'
    (dans un fichier en entree) et la multipli par 100 (jusqu ici tout va bien ) mais le probleme dans certain cas j ai un resultat erroné je m explique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    en entree j ai ma PSUM = 10255.97
    en sortie apres le passage du awk j ai PSUM=1025596
    qui fai une difference de 0.01 avant multiplication
    ca le fait pour ce montant et par pour d autre et j ignore la raison !!

    qlq un connait il une parade a ce genre de subtilité du langage awk ?

    milles mercis

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    Je connais mal l'awk mais peut etre qu'il faut multiplier le contenu de la variable au lieu de la variable comme dans certains autres langages ?

    En tout cas je serai curieux de voir la solution si tu trouves parceque awk m'interesse de plus en plus...

  3. #3
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    je multipli bien '$4' qui correspond au montant dans le fichier que traite le awk justement .....

    je connais personne qui n appreci pas le awk mais je crois que j vais commencer a faire de la mauvaise pub

    une solution svouplai

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Et que te donne ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk 'BEGIN {SUM=102255.97; print SUM*100}'
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

  5. #5
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    awk -F';' '
                {
                   NUMBER=$1
                   DATE=$2
                   PAY_KIND=$3
                   PSUM=BEGIN($4*100)
                   LITERA_SUM=$5
    OU

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    awk -F';' '
                {
                   NUMBER=$1
                   DATE=$2
                   PAY_KIND=$3
                   BEGIN (PSUM=$4*100)
                   LITERA_SUM=$5
    ne fonctionne po
    ce qu il me faut c est la multiplication de '$4' (4eme colonne dans mon fichier) par 100 soit infaillible !

  6. #6
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    awk -F';' 'BEGIN
                {
                   NUMBER=$1
                   DATE=$2
                   PAY_KIND=$3
                   PSUM=$4*100
                   LITERA_SUM=$5
    ne fonctionne po non plus !!!
    aller svouplai

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Faudrait peut-être commencer par répondre aux questions non?

    Citation Envoyé par ripat
    Et que te donne ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk 'BEGIN {SUM=102255.97; print SUM*100}'
    Vérifie tes locales LANG=C

    Essaye
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

  8. #8
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    ben !!! j avais repondu a la question m'siou

    sinon ca marche po (quand je dis ca marche pas c est que mon script m envoi chier avec une erreur du genre )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    awk -F';' '
                {
                   NUMBER=$1
                   DATE=$2
                   PAY_KIND=$3
                   PSUM=$4'000'*100
     
     
     
    awk : 0602-538 La valeur de la zone 4000 doit être comprise entre 0 et 1024.
     Numéro de ligne source : 6.
     Contexte d'erreur :
                                   >>>  PSUM=$4000 <<< *100

  9. #9
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    je vais voir si je trouves quelque chose, mais c'est surprenant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    # awk 'BEGIN {printf "%15d\n",10255.97*100;exit}'
            1025596
    à suivre...

  10. #10
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    c'est un problème d'arrondi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    # awk 'BEGIN {printf "%32.32F\n",10255.97*100;exit}'
    1025596.99999999988358467817306518554688
    donc tu pourrais faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    # awk 'BEGIN {printf "%15.0F\n",10255.97*100;exit}'
            1025597
    donc remplacer %15.15d par %15.0F dans ton code, ok?

  11. #11
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    quand j ai vu ta reponse j etais heureux sauf que :
    voici mes tests

    mon script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    awk -F';' '
                {
                   NUMBER=$1
                   DATE=$2
                   PAY_KIND=$3
                   PSUM=$4*100
     
       printf ("%-15.15d\n",PSUM)
       printf ("%-15.15d\n",$4)
       print PSUM
       print $4
                }
                         '
    Resulat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    000000001025596
    000000000010255
    1,0256e+06
    10255.97
    mainant la modif

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    awk -F';' '
                {
                   NUMBER=$1
                   DATE=$2
                   PAY_KIND=$3
                   PSUM=$4*100
     
       printf ("%-15.0F\n",PSUM)
       printf ("%-15.15d\n",$4)
       print PSUM
       print $4
                }
                         '
    resultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    %-15.0F
    000000000010255
    1,0256e+06
    10255.97
    encore une suptilité ma parole
    mais en tout cas bravo champion

  12. #12
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    oops, désolé, je n'ai testé qu'avec linux

    si tu as Unix, tu devrais remplacer %-15.0F par %-15.0f, ok?

  13. #13
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    merci beaucoup grand chef ! ca fonctionne !

    a pliche

  14. #14
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    bonjour,

    et oui de retour sur ce probleme ....

    vla un autre soucis suite a cette super trouvaille qui 0f ...
    maintenant j ai des montant a zero suite a cette modif ....

    y a t il un autre moyen que awk afin de formater un fichier svouplai ???

  15. #15
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par nenekes
    vla un autre soucis suite a cette super trouvaille qui 0f ...
    maintenant j ai des montant a zero suite a cette modif ....
    lesquels? exemple SVP
    Citation Envoyé par nenekes
    y a t il un autre moyen que awk afin de formater un fichier svouplai ???
    oui, plein, par exemple perl

  16. #16
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    ben tout simplement qlq montant sont a zero .....
    le probleme d arrodis ca marche bien grace a cette modif mais de temps a autres les montant en questios arrivent a zero .... bizarre .... je ne pige rien !!!
    putain pourquoi j ai pas choisi un autre metier mais faut bien manger

    merci pour l aide

  17. #17
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    le code suivant me donne un bon resultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    awk -F'|' '
                {
                   NUMBER=$1
                   DATE=$2
                   PAY_KIND=$3
                   PSUM=$4*100
       printf ("%15.0f\n",PSUM)
       print PSUM
       print $4
    Resultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            1025597
    1,0256e+06
    10255.97
    et je voudrais obtenir le resultat suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    000000001025597
    1,0256e+06
    10255.97
    est-ce possible ?? svouplai ??

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

Discussions similaires

  1. parcourir 2 fichiers avec awk, et comparer 2 champs
    Par morphdown dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 09/07/2013, 11h03
  2. Extraire des valeurs d'un fichier avec AWK
    Par Maillon dans le forum Linux
    Réponses: 2
    Dernier message: 05/02/2009, 22h49
  3. traiter 2 fichier avec awk
    Par zcoul dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 11/03/2008, 18h28
  4. Lire un fichier avec awk
    Par lili2704 dans le forum Linux
    Réponses: 4
    Dernier message: 18/01/2007, 15h53
  5. Formatage de fichier avec awk
    Par sam56 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 12/10/2006, 11h04

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