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 confirmé
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    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 confirmé 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 : 48
    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
    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 confirmé
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    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 Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    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}'

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    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 confirmé
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    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 Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    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

  8. #8
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    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
    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
    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 confirmé
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    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
    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 confirmé
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Par défaut
    merci beaucoup grand chef ! ca fonctionne !

    a pliche

  14. #14
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    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
    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 confirmé
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    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 confirmé
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    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