Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/08/2006, 15h15   #1
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 192
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 192
Points : 39
Points : 39
Par défaut problème formatage de fichier avec awk

bonjour a tous

j ai un pb dans mon script que voici
Code :
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 :
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
nenekes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2006, 15h28   #2
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 546
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
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 : 3 546
Points : 7 772
Points : 7 772
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...
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2006, 16h03   #3
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 192
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 192
Points : 39
Points : 39
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
nenekes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2006, 16h35   #4
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
Et que te donne ceci:

Code :
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
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2006, 17h08   #5
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 192
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 192
Points : 39
Points : 39
Code :
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 :
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 !
nenekes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2006, 17h11   #6
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 192
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 192
Points : 39
Points : 39
ou encore
Code :
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
nenekes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2006, 17h20   #7
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
Faudrait peut-être commencer par répondre aux questions non?

Citation:
Envoyé par ripat
Et que te donne ceci:

Code :
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
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2006, 17h37   #8
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 192
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 192
Points : 39
Points : 39
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 :
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
nenekes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2006, 17h45   #9
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
je vais voir si je trouves quelque chose, mais c'est surprenant

Code :
1
2
3
 
# awk 'BEGIN {printf "%15d\n",10255.97*100;exit}'
        1025596
à suivre...
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2006, 18h19   #10
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
c'est un problème d'arrondi

Code :
1
2
3
 
# awk 'BEGIN {printf "%32.32F\n",10255.97*100;exit}'
1025596.99999999988358467817306518554688
donc tu pourrais faire
Code :
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?
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2006, 19h07   #11
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 192
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 192
Points : 39
Points : 39
quand j ai vu ta reponse j etais heureux sauf que :
voici mes tests

mon script
Code :
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 :
1
2
3
4
000000001025596
000000000010255
1,0256e+06
10255.97
mainant la modif

Code :
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 :
1
2
3
4
5
%-15.0F
000000000010255
1,0256e+06
10255.97
encore une suptilité ma parole
mais en tout cas bravo champion
nenekes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2006, 19h34   #12
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
oops, désolé, je n'ai testé qu'avec linux

si tu as Unix, tu devrais remplacer %-15.0F par %-15.0f, ok?
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2006, 10h04   #13
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 192
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 192
Points : 39
Points : 39
merci beaucoup grand chef ! ca fonctionne !

a pliche
nenekes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2006, 12h16   #14
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 192
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 192
Points : 39
Points : 39
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 ???
nenekes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2006, 12h42   #15
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
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
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2006, 18h29   #16
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 192
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 192
Points : 39
Points : 39
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
nenekes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 12h53   #17
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 192
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 192
Points : 39
Points : 39
le code suivant me donne un bon resultat :
Code :
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 :
1
2
3
4
        1025597
1,0256e+06
10255.97
et je voudrais obtenir le resultat suivant :
Code :
1
2
3
4
000000001025597
1,0256e+06
10255.97
est-ce possible ?? svouplai ??
nenekes est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h20.


 
 
 
 
Partenaires

Hébergement Web