|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : avril 2011 Messages : 14 ![]() |
Bonjour,
Je voudrais faire un formatage pour une des colonnes de données pour un fichier ensuite reproduire un nouveau fichier avec ces données formatées. Quel genre de syntaxe faudrait-il utiliser? Merci d'avance, Clément |
|
|
03
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 534 ![]() |
tout dépend du format d'entrée et du format de sortie attendue... donc on peut pas répondre.
e r r t en entree pour r e t en sortie par exemple Code :
awk '{ print $2" "$1" "$4 }' fichier_entrée > fichier sortie donc sans ton besoin exact on peut pas te répondre. |
|
|
10
|
|
|
#3 |
|
Membre Expert
![]() Frédéric Brugmans Informaticien multitâche Inscription : février 2005 Messages : 661 ![]() |
awk dispose d'une fonction printf ( similaire au C ) qui permet de formater l'affichage
|
|
|
20
|
|
|
#4 | |
|
Invité régulier
![]() Inscription : avril 2011 Messages : 14 ![]() |
Je voudrais juste formater une colonne par exemple $10 à %15f qu'était %13f en gardant les même formats pour les restes.
Merci d'avance Citation:
|
|
|
|
11
|
|
|
#5 |
|
Invité régulier
![]() Inscription : avril 2011 Messages : 14 ![]() |
Oui, je connais printf, mais comme il y a tellement de colonnes dans le fichiers et je ne voulais pas toucher les autres à part de la colonne qui m'intéresse.En plus, je connais pas le format d'entrées du fichier original.
|
|
|
10
|
|
|
#6 | ||||
|
Membre Expert
![]() |
Donne un exemple concret, sinon, on y arrivera jamais...
Tu peux par exemple nous faire un truc du genre : Fichier en entrée Code :
En bonus, voilà le script awk qui correspond (ça te donnera peut-être des idées Code :
|
||||
|
|
10
|
|
|
#7 |
|
Invité régulier
![]() Inscription : avril 2011 Messages : 14 ![]() |
Merci pour votre réponse, et pour l'info, je travaille dans win32 en utilisant gawk. Je veux faire des calculs pour les données dans un fichier d'entrée, les données sont sous forme de 3.3810830896328
0.3127507145763 1.6187476662371 0.1058373280992. mais mon système, il ignore les chiffres après le point. par exemple 3.3810830896328/100, ça donne 0.03 |
|
|
11
|
|
|
#8 | |||
|
Membre Expert
![]() |
Citation:
![]() 3.3810830896328/100 = 0.033810830896328 donc si tu utilises printf %.2f là dessus, c'est normal qu'il affiche 0.03 !! Edit: Code :
|
|||
|
|
10
|
|
|
#9 |
|
Invité régulier
![]() Inscription : avril 2011 Messages : 14 ![]() |
Je n'ai pas utilisé le printf.
|
|
|
11
|
|
|
#10 | ||
|
Membre Expert
![]() |
Tu veux pas plutôt dire ce que tu fais et ce qui ne marche pas plutôt que de nous dire ce que tu n'as pas fait ?
Ça ira plus vite je pense... pour info, print sans f prend aussi en compte les décimales, donc on est pas rendu : Code :
|
||
|
|
10
|
|
|
#11 |
|
Invité régulier
![]() Inscription : avril 2011 Messages : 14 ![]() |
Le fichier à traiter contient des données comme
0.3127507145763 1.6187476662371 0.1058373280992 J'écris un gawk, ensuite je l'ai mis dans un batch. dans gawk, j'écris print $1 > outfile, ça nous génère un fichier même que le fichier d'origine. ça c'est normal. Mais quand j'écris $1/100 > outfile, la sortie est 0, 1 , 0 par contre, je voudrais bien les résultats corrects et précises. J'ai testé avec print 3.5 > outfile dans gawk, ça me donne 3 au lieu de 3.5. Je l'ai trouvé incompréhensible. |
|
|
10
|
|
|
#12 | ||
|
Membre Expert
![]() |
Etrange, tu utilises quelle version de gawk ?
J'ai fait le test suivant sous Windows XP 32bits avec gawk 3.1.6 : Code :
|
||
|
|
20
|
|
|
#13 | |
|
Invité régulier
![]() Inscription : avril 2011 Messages : 14 ![]() |
Après quelques tests, j'ai trouvé le problème d'origine qui est exactement pareil que un sur internet.
http://objectmix.com/awk/26958-lc_numeric-windows.html Il a réussi à la fin en changeant sa version de awk. Mais pour moi, j'ai pas de droit de changer ma version de gawk. Saviez vous un autre moyen qui permet de faire la même chose? Merci d'avance Citation:
|
|
|
|
10
|
|
|
#14 | ||||
|
Membre Expert
![]() |
Si c'est un problème de mauvais séparateur décimal, tu peux essayer de modifier ton texte en entrée.
Par exemple, chez moi, le séparateur décimal est le point comme on l'a vu dans mon exemple. Donc si mon fichier comporte des virgules en entrée, ça ne marche plus vraiment : Code :
Code :
|
||||
|
|
20
|
|
|
#15 | |||||
|
Invité régulier
![]() Inscription : avril 2011 Messages : 14 ![]() |
Merci pour tous votre aide, c'est une bonne idée. malheuresement, ça ne marche pas dans mon système.
Citation:
|
|||||
|
|
10
|
|
|
#16 |
|
Membre Expert
![]() |
Peux-tu poster le résultat de la commande suivante stp :
Afin de déterminer ton séparateur décimal... Si tu obtiens 3,3333 par exemple (avec une virgule donc), cette commande devrait marcher : Code :
gawk "{num=gsub(/\./,\",\",$1); print $num/100 }" test |
|
|
10
|
|
|
#17 | ||
|
Invité régulier
![]() Inscription : avril 2011 Messages : 14 ![]() |
le résultat est 3,33333.
Mon code original est sous forme de celui-ci, du coup, j'ai mis votre code dedans et ça rend mon système KO, aucun résultat généré. Il y a encore un bat qui appelle le .awk, et le paramètre pour le fichier est listé dans .bat Code :
|
||
|
|
00
|
|
|
#18 |
|
Membre Expert
![]() |
Nan mais c'est n'importe quoi ce que j'ai écris... et personne pour me le dire
![]() Dans mes exemples d'avant, je ne devrais pas avoir écrit ni num=gsub(...) ni print $num/100. Premièrement, gsub ne renvoie pas la chaîne modifiée mais modifie directement la chaîne passée en troisième argument (il renvoie le nombre de modifications). De deux, une variable awk ne se préfixe pas avec un $ mis à part pour les variables représentant une colonne. Cela marchait dans mon cas, car num prenait 1 pour valeur (un seul remplacement de "," vers ".") et que du coup, le print $num devenait un print $1 une fois num remplacé par sa valeur. Comme en plus, gsub modifie bien $1 en paramètre, le résultat était celui attendu, mais c'était un coup de pot (ou pas puisque j'aurais vu mon erreur plus tôt !). A force de mélanger les scripts, j'ai écrit vraiment n'importe quoi ici Bref, pour en revenir à ton problème, si j'ai bien compris, ta colonne 70 contient ton numéro avec un ".", mais ton système attend une "," en séparateur. Donc ceci devrait transformer le "." en "," dans la colonne 70 ce qui devrait permettre le calcul $70/100 : Code :
gawk "{gsub(/\./,\",\",$70); print $70/100 }" test |
|
|
10
|
|
|
#19 | ||
|
Invité régulier
![]() Inscription : avril 2011 Messages : 14 ![]() |
Bonjour,
Bizarrement, le code modifié a rendu mon système à nouveau KO, c'est à dire pas de résultat. Pour vous donner plus d'informations, voici quelques tests effectués dans mon système : Code :
|
||
|
|
00
|
|
|
#20 |
|
Membre Expert
![]() |
Damned...
Et si tu fais juste Code :
gawk "{gsub(/\./,\",\",$70); print $70}" test |
|
|
10
|
Copyright © 2000-2012 - www.developpez.com