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 27/05/2014, à 23:00

zackalucard

Modifier type de notation d'un fichier de valeurs

Bonsoir tout le monde,

Je viens de me mettre à la programmation Shell !
On peut faire beaucoup de chose, c'est vraiment bien, mais ce n'est pas forcément évident ><

Bref, voici mon prob : J'ai un fichier .csv de valeurs, chaque colonne étant séparée d'une virgule.

Certaines de ces valeurs sont soit en nombre décimale (pas de soucis), soit en notation scientifique.
Le hic, c'est que la fonction que j'utilise pour chercher le minimum de la colonne 4 n'a pas l'air de reconnaître les nombres scientifiques...

min=$(cut -d "," -f4 Position_Front$i.csv | sort -n | head -1)

Je pensais donc à passer toutes les valeurs de mon fichier .csv en notation décimale pour régler le problème.

Savez-vous comment je dois procéder ?

Bien à vous,

Zackalucard

Hors ligne

#2 Le 28/05/2014, à 05:53

pingouinux

Re : Modifier type de notation d'un fichier de valeurs

Bonjour,
Essaye avec sort -g

Hors ligne

#3 Le 28/05/2014, à 08:40

Postmortem

Re : Modifier type de notation d'un fichier de valeurs

Salut,
Sinon, montre une partie de ton fichier ; awk (du moins gawk) doit pouvoir convertir en décimal ou même te donner la valeur minimum sans passer par la convention.
Et merci pingouinux, j'avais pas fait gaffe au -g de sort. Elles sont vraiment bien les commandes GNU !


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#4 Le 28/05/2014, à 09:25

tiramiseb

Re : Modifier type de notation d'un fichier de valeurs

Salut,

De mon côté, pour un traitement de ce genre, je le ferais en Python...

Hors ligne

#5 Le 28/05/2014, à 10:12

zackalucard

Re : Modifier type de notation d'un fichier de valeurs

Bonjour et merci pour vos réponse !

Pingouinux, j'ai essayé ton option avec un exemple mais ielle trie de la façon suivante :

1
3.0e-4
1.0e0
1.0e1

donne
1
1.0e0
1.0e1
3.0e-4

C'est étrange hmm

Postmortem, voici un exemple de mes fichiers .csv :

1.4191,-5e-05
1.4038,7.7665e-05
1.4063,8.3697e-05
1.4106,8.1899e-05
1.4159,9.6146e-05
1.4166,0.0001
1.4172,0.0001019
1.4118,0.00010688

J'espère que vous pourrez m'aider smile

Hors ligne

#6 Le 28/05/2014, à 11:01

pingouinux

Re : Modifier type de notation d'un fichier de valeurs

zackalucaed a écrit :

Pingouinux, j'ai essayé ton option avec un exemple mais ielle trie de la façon suivante :

1
3.0e-4
1.0e0
1.0e1

donne
1
1.0e0
1.0e1
3.0e-4

C'est bizarre, j'obtiens ceci

$ cat j
1
3.0e-4
1.0e0
1.0e1

$ sort -g j
3.0e-4
1
1.0e0
1.0e1

En revanche, ceci donne la même chose que ton résultat (oubli de -g ?)

$ sort j
1
1.0e0
1.0e1
3.0e-4

Ajouté :
Ton exemple en #5 contient 2 champs, alors que tu cherches le 4ème avec le cut en #1

Dernière modification par pingouinux (Le 28/05/2014, à 11:17)

Hors ligne

#7 Le 28/05/2014, à 11:38

zackalucard

Re : Modifier type de notation d'un fichier de valeurs

Oui c'est bizarre car j'utilise bien le -g...
Il y a une option intrinsèque à activer peut-être ?

Effectivement, j'ai mis en #5 un exemple plus simple que ce que j'avais pour que ce soit clair.
Je cherche dans #5 à trouver le min et le max de ma deuxième colonne.

Hors ligne

#8 Le 28/05/2014, à 11:47

zackalucard

Re : Modifier type de notation d'un fichier de valeurs

Alors, j'ai essayé une commande :

while read
do
  sed 's/e/*10^/g;s/ /*/' | bc
done < test.dat

avec test.dat, le fichier qui contient les valeurs en #5/#6. Il me donne :

0
1.0
10.0

Il y a du progrès mais là il me sucre le 3.0e-4 >>

Hors ligne

#9 Le 28/05/2014, à 15:10

claudius01

Re : Modifier type de notation d'un fichier de valeurs

Bonjour,

J'ai trouvé sur ce même forum, le fil de discussion LINUX : conversion nombre scientifique en nombre decimal (awk, printf) qui propose la commande:

$ echo "5.083E-5" | awk -F"E" 'BEGIN{OFMT="%10.10f"} {print $1 * (10 ^ $2)}'
0.0000508300

$ echo "3.0E-4" | awk -F"E" 'BEGIN{OFMT="%10.10f"} {print $1 * (10 ^ $2)}'
0.0003000000

$ echo "3.0E+4" | awk -F"E" 'BEGIN{OFMT="%10.10f"} {print $1 * (10 ^ $2)}'
30000

à adapter en terme de nombre de chiffres avant et après la virgule et qui permettrait de faciliter le classement souhaité...


Cordialement, A+
--
Claudius

Hors ligne

#10 Le 28/05/2014, à 20:52

Postmortem

Re : Modifier type de notation d'un fichier de valeurs

Salut,
J'ai fait quelques tests avec ce fichier :

cat /tmp/test
1.4038,7.7665e-05
1.4063,8.3697e-05
1.4106,8.1899e-05
1.4191,-5e-05
1.4159,9.6146e-05
1.4166,0.0001
1.4172,0.0001019
1.4118,0.00010688
$ awk -F, 'NR==1{min=$2;next}$2<min{min=$2}END{print min}' /tmp/test
-5e-05

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#11 Le 02/06/2014, à 18:22

zackalucard

Re : Modifier type de notation d'un fichier de valeurs

Merci infiniment Postmortem, ça marche nickel !!!! big_smile

Merci à tout les autres également pour vos réponses [je me suis mis entre temps au Python mais pas évident de slalomer entre les différents codes hmm]

Hors ligne

#12 Le 02/06/2014, à 18:33

pingouinux

Re : Modifier type de notation d'un fichier de valeurs

Ton résultat curieux avec sort -g (messages #6 et #7) est peut-être un problème de locale. Que donne cette commande

locale

Hors ligne

#13 Le 09/06/2014, à 20:10

zackalucard

Re : Modifier type de notation d'un fichier de valeurs

Saut pinguinux,

Désolé pour l'attente, j'étais pas mal occupé cette semaine.
Voici ce que donne ma commande :

LANG=fr_FR.UTF-8
LC_CTYPE="fr_FR.UTF-8"
LC_NUMERIC="fr_FR.UTF-8"
LC_TIME="fr_FR.UTF-8"
LC_COLLATE="fr_FR.UTF-8"
LC_MONETARY="fr_FR.UTF-8"
LC_MESSAGES="fr_FR.UTF-8"
LC_PAPER="fr_FR.UTF-8"
LC_NAME="fr_FR.UTF-8"
LC_ADDRESS="fr_FR.UTF-8"
LC_TELEPHONE="fr_FR.UTF-8"
LC_MEASUREMENT="fr_FR.UTF-8"
LC_IDENTIFICATION="fr_FR.UTF-8"
LC_ALL=

Hors ligne

#14 Le 09/06/2014, à 22:36

pingouinux

Re : Modifier type de notation d'un fichier de valeurs

Avec LC_NUMERIC="fr_FR.UTF-8", le sort -g serait correct si le point décimal était remplacé par une virgule. Avec ton exemple en #5, ceci devrait faire un tri correct :

LC_NUMERIC=C sort -g ton_fichier_numérique_avec_point_décimal

Hors ligne