Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/08/2017, à 15:46

Beuhlet_Reseau

[RESOLU] Remplacer les Float Number sur une colonne entière (csv)

Hello,

Sur mon outil de suivi, je rencontre parfois des erreurs.

Après vérification dans mon fichier csv qui résulte d'un script bash j'ai remarqué ce souci :

80

80
100
100
100
80
100
85.55078125
100
100
90
100
80
90

On peut voir sur cette exemple, d'où vient le souci. Pour une quelconque raison certain nombre sont flottants.

Chaque ligne de mon fichier est composée de 31 champs, et le champs en question est le n° 20.

J'avais pensé à une commande simple à ajouter à un cat du fichier avec redirection.
Je ne sais pas comment préciser la colonne en question
=> s/[891]?,*/[891]0/g

Résultat attendu :

80
100
100
100
80
100
85.55078125 => 80
100
100
90
100
80
90

Dernière modification par Beuhlet_Reseau (Le 25/08/2017, à 09:57)


L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).

Hors ligne

#2 Le 23/08/2017, à 16:01

Watael

Re : [RESOLU] Remplacer les Float Number sur une colonne entière (csv)

salut,

quand on traite des champs, on utilise (g)awk.

et alors, ton problème n'en est plus un, puisque (g)awk sait traiter les nombres flottants. wink


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 23/08/2017, à 16:03

pingouinux

Re : [RESOLU] Remplacer les Float Number sur une colonne entière (csv)

Bonjour,
Pour la conversion

$ nb_decimal=85.55078125
$ nb_arrondi=$(bc <<<"($nb_decimal/10)*10")
$ echo $nb_arrondi
80

Pour le reste, montre quelques lignes de ton fichier avec toutes les colonnes.

Hors ligne

#4 Le 23/08/2017, à 16:09

Beuhlet_Reseau

Re : [RESOLU] Remplacer les Float Number sur une colonne entière (csv)

Merci à vous,

Voici un exemple type d'une ligne :

101;29052272;/suivi_messe;3;1503366363;1503366407;L;L;101;223690;/ack;00;-1048576;0;-102924;172800;1503539194;101018801388;000031621158;80,455654;1;1085049;1;1503366394;100Mo;;166403;00;150337;0;1

A la limite voici ce que j'aimerais :

101;29052272;/suivi_messe;3;1503366363;1503366407;L;L;101;223690;/ack;00;-1048576;0;-102924;172800;1503539194;101018801388;[s]0000[/s]31621158;80[s],455654[/s];1;1085049;1;1503366394;100Mo;;166403;00;150337;0;1

J'ai essayé de barrer les infos a retirer mais ça fonctionne pas (surement les balises code qui bloquent).

En gros je souhaite :

Dans le cas où il y a "0000" au début du champs 19 (ici cela donnerais 00001621158 => 31621158) et bien sûr dans le cas où le nombre est flottant dans le champ 20 le rendre décimal.

Voici comment je pense actuellement :

awk -F ";" {if $19 ^0000 drop (0000) {if $20 = "[891]?,*" (arrondie)}

Dernière modification par Beuhlet_Reseau (Le 23/08/2017, à 16:15)


L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).

Hors ligne

#5 Le 23/08/2017, à 16:24

Watael

Re : [RESOLU] Remplacer les Float Number sur une colonne entière (csv)

¿ un nombre flottant n'est pas un nombre décimal ?

gawk 'BEGIN{FS=OFS=";"}{gsub("^0+","",$19); $20=int($20)}1'

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#6 Le 23/08/2017, à 16:38

Beuhlet_Reseau

Re : [RESOLU] Remplacer les Float Number sur une colonne entière (csv)

Aha si excuse moi pour cet abus smile

Merci, excellent super résultat.

Je n'avais pas fait attention mais dans le cas où ce champs est vide  ;"";  la commande $20=int($20)}1 inscrit un 0 ? C'est en tout cas ce que j'ai l'impression, c'est possible de prendre en compte ce genre de cas sans alourdir la commande ?

Le 1 a la fin signifie une seule fois c'est bien ça ?


L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).

Hors ligne

#7 Le 23/08/2017, à 17:31

Watael

Re : [RESOLU] Remplacer les Float Number sur une colonne entière (csv)

le 1, c'est pour forcer l'affichage.

...$19);{if($20)$20=int($20)} }1'

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#8 Le 24/08/2017, à 16:54

Beuhlet_Reseau

Re : [RESOLU] Remplacer les Float Number sur une colonne entière (csv)

Franchement super résultat. Merci beaucoup.

Maintenant c'est juste mon côté perfectionniste mais j'aimerais savoir une chose.

J'ai 2 paliers en %, à savoir 80 et 100.

Le 100 est toujours bien noté mais le palier de 80 diverge beaucoup.

=> Comme tu as pu le voir en m'aidant, il peut prendre la forme d'un flottant, même ramener en integer (ce qui est deja super), cela donne des % en 82, 95, 88..... même 99 j'ai pu voir.

Tu penses cela faisable/simple de pouvoir ramener toutes les valeurs integer que l'on a traité (82, 95, 88) à 80 ?

____________________________________________________________________________________

Tu me corrigeras si c'est faux mais , imaginons que mon champs $6 contient un ensemble de chaîne de caractère mais que seul le premier mot m'intéresse (exemple : Request xxxx yyyy zzzz, je veux juste le request):

gawk 'BEGIN{FS=OFS="|"}{gsub("^0+","",$3); $4=int($4) }1{$6=cut -d " " -f1}'    tu en penses quoi ?

Dernière modification par Beuhlet_Reseau (Le 24/08/2017, à 17:21)


L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).

Hors ligne

#9 Le 24/08/2017, à 17:27

Watael

Re : [RESOLU] Remplacer les Float Number sur une colonne entière (csv)

Tu penses cela faisable/simple de pouvoir ramener toutes les valeurs integer que l'on a traité (82, 95, 88) à 80 ?

je ne comprends pas.
quel serait le raisonnement, la logique, l'opération, qui mènerait de 95 à 80 ?

gawk 'BEGIN{FS=OFS="|"}{gsub("^0+","",$3); $4=int($4) }1{$6=cut -d " " -f1}'    tu en penses quoi ?

qu'il faut utiliser les balises codes du site, smile
que awk n'est pas un shell, et qu'en conséquence il ne peut pas exécuter "spontanément" des commandes externes,
que tu dois parcourir la documentation (guide de l'utilisateur en ligne, page man), pour trouver la fonction qui te permettra ne n'afficher que le premier mot d'un champ.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#10 Le 24/08/2017, à 17:41

Beuhlet_Reseau

Re : [RESOLU] Remplacer les Float Number sur une colonne entière (csv)

En faite c'est juste mon outil de logs qui fait un mauvais calcule lorsqu'il créer les fichiers.

Ainsi seulement pour le palier 80%, il y a un bug qui reste introuvable. En faite toutes les valeurs au dessus de 80 et en dessous de 100 devraient être initialisées à 80%.

Après c'est trop complexe c'est pas grave tu m'a déjà très bien aidé.

Merci Watel et Pingouin


L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).

Hors ligne