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 21/01/2019, à 08:56

julien01

Trouver la valeur numérique la plus basse dans un CSV

Bonjour à tou.tes.s,

J'ai un fichier CSV avec des données météo, dont une colonne température qui peut être donc négative ou positive avec une décimale. (exemples : 2.4, 14.2, 9.0 ou -3.7)

J'ai un scripts qui tourne et qui doit trouver les valeurs mini et maxi de température d'une journée en affichant sa date et son heure.
Je fait donc la commande suivante :

cat fichier.csv | grep DATE-AAAAMMJJ | awk -F ";" '{print $4,$1,$2}' | grep -v "no data" | sort -n | sed -n '1p' | awk -F " " '{print $1}'

Cela fonctionne (presque) car j'ai remarqué un bug pour les valeurs négatives à virgules. Dans l'exemple du fichier CSV ci-dessous, la commande me renvoi -5.0 alors que la valeur mini de ce CSV est -5.4
Ce qui pose problème c'est le sort -n mais j'ai beau essayer d'autres méthodes je ne trouve pas comment trouver -5.4

Si vous avez des idées je suis preneur smile

Exemple de CSV :

20190119;000501;1017;-2.6;81;-5.41;N/A;292.0;WNW;0.0;0.0;0;null;Sunny
20190119;010001;1017;-2.9;82;-5.54;N/A;292.0;WNW;0.0;0.0;0;null;Sunny
20190119;020001;1017;-3.8;81;-6.58;N/A;292.0;WNW;2.9;0.4;0;null;Sunny
20190119;030001;1016;-3.8;82;-6.42;N/A;292.0;WNW;2.2;2.2;0;null;Partly
20190119;040001;1016;-4.3;83;-6.75;N/A;292.0;WNW;3.6;2.5;0;null;Partly
20190119;040501;1016;-4.4;83;-6.85;N/A;292.0;WNW;4.0;3.2;0;null;Partly
20190119;043501;1016;-4.7;83;-7.15;N/A;292.0;WNW;0.0;0.0;0;null;Partly
20190119;044001;1016;-4.7;83;-7.15;N/A;292.0;WNW;0.0;0.0;0;null;Partly
20190119;044501;1016;-4.5;83;-6.95;N/A;292.0;WNW;2.9;0.7;0;null;Partly
20190119;045001;1016;-4.6;83;-7.05;N/A;292.0;WNW;2.2;1.8;0;null;Partly
20190119;055001;1015;-4.8;83;-7.24;N/A;292.0;WNW;0.0;0.0;0;null;Cloudy
20190119;055501;1015;-5.1;83;-7.54;N/A;292.0;WNW;0.0;0.0;0;null;Cloudy
20190119;060001;1015;-5.2;83;-7.64;N/A;292.0;WNW;0.0;0.0;0;null;Cloudy
20190119;063501;1015;-5.4;83;-7.83;N/A;292.0;WNW;2.9;0.7;0;null;Cloudy
20190119;065501;1015;-5.2;83;-7.64;N/A;157.0;SSE;4.0;1.1;0;null;Cloudy
20190119;071001;1015;-5.1;83;-7.54;N/A;157.0;SSE;3.6;1.1;0;null;Cloudy
20190119;071501;1015;-5.0;83;-7.44;N/A;157.0;SSE;4.0;1.4;0;null;Cloudy
20190119;072001;1015;-4.9;84;-7.19;N/A;157.0;SSE;5.8;1.4;0;null;Cloudy
20190119;075001;1015;-4.7;84;-6.99;N/A;157.0;SSE;4.0;2.2;0;null;Cloudy
20190119;075501;1015;-4.6;84;-6.89;N/A;157.0;SSE;4.7;2.5;0;null;Cloudy
20190119;080001;1015;-4.6;84;-6.89;N/A;191.0;S;4.0;1.4;0;null;Cloudy
20190119;083001;1015;-4.7;84;-6.99;N/A;202.0;SSW;4.7;0.7;0;null;Cloudy
20190119;083501;1015;-4.7;84;-6.99;N/A;202.0;SSW;4.0;0.4;0;null;Cloudy
20190119;094501;1015;-4.7;84;-6.99;N/A;157.0;SSE;5.8;1.8;0;null;Cloudy
20190119;095001;1015;-4.6;84;-6.89;N/A;157.0;SSE;4.7;2.2;0;null;Cloudy
20190119;095501;1015;-4.6;84;-6.89;N/A;168.0;SSE;6.5;3.2;0;null;Cloudy
20190119;100001;1015;-4.5;84;-6.79;N/A;157.0;SSE;5.8;2.9;0;null;Cloudy
20190119;100501;1015;-4.4;84;-6.70;N/A;202.0;SSW;2.2;1.1;0;null;Cloudy
20190119;103501;1015;-4.0;86;-6.00;N/A;202.0;SSW;2.9;1.1;0;null;Cloudy
20190119;104001;1015;-3.9;84;-6.21;N/A;214.0;SSW;4.7;1.8;0;null;Cloudy
20190119;104501;1015;-3.8;84;-6.11;N/A;168.0;SSE;2.9;0.7;0;null;Cloudy
20190119;111001;1015;-3.4;86;-5.41;N/A;202.0;SSW;5.4;2.2;0;null;Cloudy
20190119;112002;1016;-3.2;86;-5.21;N/A;202.0;SSW;4.0;1.8;0;null;Cloudy
20190119;113001;1016;-3.1;86;-5.11;N/A;214.0;SSW;2.9;1.4;0;null;Cloudy
20190119;113501;1016;-3.0;86;-5.01;N/A;202.0;SSW;3.6;0.7;0;null;Cloudy
20190119;114001;1016;-2.9;86;-4.91;N/A;202.0;SSW;4.0;2.2;0;null;Cloudy
20190119;114501;1016;-2.8;87;-4.66;N/A;214.0;SSW;4.0;1.1;0;null;Cloudy
20190119;115001;1016;-2.8;86;-4.82;N/A;202.0;SSW;3.6;1.8;0;null;Cloudy
20190119;115501;1016;-2.7;87;-4.56;N/A;202.0;SSW;5.4;1.8;0;null;Cloudy
20190119;120001;1016;-2.8;87;-4.66;N/A;225.0;SW;3.6;1.8;0;null;Cloudy
20190119;120501;1016;-2.6;87;-4.46;N/A;236.0;SW;4.0;1.8;0;null;Cloudy
20190119;121001;1016;-2.5;87;-4.37;N/A;202.0;SSW;4.0;1.8;0;null;Cloudy
20190119;121501;1015;-2.6;87;-4.46;N/A;225.0;SW;4.0;1.4;0;null;Cloudy
20190119;122002;1015;-2.5;87;-4.37;N/A;180.0;S;4.7;1.4;0;null;Cloudy
20190119;122501;1015;-2.2;87;-4.07;N/A;191.0;S;4.0;0.7;0;null;Cloudy
20190119;123001;1015;-2.2;87;-4.07;N/A;191.0;S;6.5;1.1;0;null;Cloudy
20190119;123502;1015;-2.0;88;-3.72;N/A;202.0;SSW;4.0;1.4;0;null;Cloudy
20190119;124001;1015;-1.7;88;-3.43;N/A;202.0;SSW;4.0;0.4;0;null;Cloudy
20190119;124501;1015;-1.6;88;-3.33;N/A;202.0;SSW;2.2;0.4;0;null;Cloudy
20190119;125001;1015;-1.5;88;-3.23;N/A;202.0;SSW;4.0;0.7;0;null;Cloudy
20190119;125501;1015;-1.7;88;-3.43;N/A;214.0;SSW;4.0;3.2;0;null;Cloudy
20190119;130002;1015;-1.8;88;-3.52;N/A;225.0;SW;5.4;2.9;0;null;Cloudy
20190119;130501;1014;-1.8;88;-3.52;N/A;247.0;WSW;4.7;2.5;0;null;Cloudy
20190119;131001;1014;-1.7;88;-3.43;N/A;191.0;S;4.0;1.4;0;null;Cloudy
20190119;131501;1014;-1.6;88;-3.33;N/A;202.0;SSW;4.7;0.7;0;null;Cloudy
20190119;132001;1014;-1.5;88;-3.23;N/A;202.0;SSW;4.0;1.1;0;null;Cloudy
20190119;132501;1014;-1.4;88;-3.13;N/A;225.0;SW;4.0;2.5;0;null;Cloudy
20190119;133001;1014;-1.2;88;-2.93;N/A;214.0;SSW;4.0;2.2;0;null;Cloudy
20190119;133501;1014;-1.1;89;-2.68;N/A;202.0;SSW;2.9;0.7;0;null;Cloudy
20190119;134001;1014;-1.3;88;-3.03;N/A;180.0;S;2.2;0.7;0;null;Cloudy
20190119;134501;1014;-1.3;88;-3.03;N/A;157.0;SSE;4.0;1.1;0;null;Cloudy
20190119;135001;1014;-1.1;89;-2.68;N/A;157.0;SSE;4.7;2.9;0;null;Cloudy
20190119;135501;1014;-1.0;89;-2.58;N/A;191.0;S;4.0;1.8;0;null;Cloudy
20190119;140001;1014;-1.1;89;-2.68;N/A;157.0;SSE;4.0;2.2;0;null;Cloudy
20190119;140501;1014;-1.0;89;-2.58;N/A;157.0;SSE;4.7;1.8;0;null;Cloudy
20190119;141001;1014;-0.8;88;-2.54;N/A;214.0;SSW;6.5;1.4;0;null;Cloudy
20190119;141501;1013;-0.6;89;-2.19;N/A;168.0;SSE;4.0;1.1;0;null;Cloudy
20190119;142001;1013;-0.4;89;-1.99;N/A;202.0;SSW;5.8;3.2;0;null;Cloudy
20190119;142501;1013;-0.3;89;-1.89;N/A;157.0;SSE;4.0;1.8;0;null;Cloudy
20190119;143001;1013;0.0;89;-1.60;N/A;180.0;S;6.5;3.6;0;null;Cloudy
20190119;143501;1013;-0.2;89;-1.79;N/A;191.0;S;5.8;2.9;0;null;Partly
20190119;144001;1013;-0.2;89;-1.79;N/A;202.0;SSW;4.0;2.5;0;null;Partly
20190119;144501;1013;-0.1;89;-1.70;N/A;157.0;SSE;5.8;2.2;0;null;Partly
20190119;145001;1013;0.0;89;-1.60;N/A;157.0;SSE;4.7;2.9;0;null;Partly
20190119;145501;1013;0.0;89;-1.60;N/A;146.0;SE;5.8;3.6;0;null;Partly
20190119;150001;1013;0.1;90;-1.35;N/A;157.0;SSE;4.7;2.9;0;null;Partly
20190119;150501;1012;0.1;90;-1.35;N/A;146.0;SE;4.0;2.9;0;null;Partly
20190119;151001;1012;0.2;91;-1.10;N/A;135.0;SE;4.0;2.2;0;null;Partly
20190119;151501;1012;0.3;92;-0.85;N/A;180.0;S;4.0;2.5;0;null;Partly
20190119;152001;1012;0.3;92;-0.85;N/A;168.0;SSE;4.0;2.5;0;null;Partly
20190119;152501;1012;0.5;94;-0.35;N/A;180.0;S;4.7;2.2;0;null;Partly
20190119;153001;1012;0.5;94;-0.35;N/A;124.0;ESE;4.7;2.9;0;null;Partly
20190119;153501;1012;0.4;95;-0.31;N/A;112.0;ESE;3.6;1.8;0;null;Partly
20190119;154001;1012;0.5;95;-0.21;N/A;112.0;ESE;3.6;1.1;0;null;Partly
20190119;154501;1012;0.7;95;-0.01;N/A;180.0;S;4.0;0.4;0;null;Partly
20190119;155001;1012;1.0;96;0.43;N/A;180.0;S;4.0;0.0;0;null;Partly
20190119;155501;1012;1.0;96;0.43;N/A;168.0;SSE;4.0;2.9;0;null;Partly
20190119;160001;1012;1.2;96;0.63;N/A;225.0;SW;2.2;1.4;0;null;Partly
20190119;160501;1012;1.4;96;0.83;N/A;202.0;SSW;2.9;1.1;0;null;Partly
20190119;161001;1012;1.4;96;0.83;N/A;112.0;ESE;0.0;0.0;0;null;Partly
20190119;161501;1012;1.4;96;0.83;N/A;135.0;SE;0.0;0.0;0;null;Partly
20190119;162001;1012;1.3;96;0.73;N/A;112.0;ESE;2.9;0.0;0;null;Partly
20190119;162501;1012;1.2;96;0.63;N/A;112.0;ESE;3.6;1.8;0;null;Partly
20190119;163001;1012;1.1;96;0.53;N/A;112.0;ESE;2.2;0.7;0;null;Partly
20190119;163501;1012;1.0;96;0.43;N/A;112.0;ESE;0.0;0.0;0;null;Partly
20190119;164001;1012;1.0;96;0.43;N/A;112.0;ESE;0.0;0.0;0;null;Partly
20190119;164501;1012;1.0;96;0.43;N/A;0.0;N;0.0;0.0;0;null;Partly
20190119;165001;1012;1.0;96;0.43;N/A;22.0;NNE;2.2;0.0;0;null;Partly
20190119;165501;1012;1.0;96;0.43;N/A;22.0;NNE;1.8;0.4;0;null;Partly
20190119;170001;1012;0.9;96;0.33;N/A;22.0;NNE;0.0;0.0;0;null;Partly
20190119;170501;1011;0.9;96;0.33;N/A;0.0;N;0.0;0.0;0;null;Partly
20190119;171002;1011;0.7;96;0.14;N/A;79.0;ENE;0.0;0.0;0;null;Partly
20190119;171501;1011;0.6;96;0.04;N/A;90.0;E;2.9;0.0;0;null;Partly
20190119;172001;1011;0.4;96;-0.16;N/A;90.0;E;2.2;1.1;0;null;Partly
20190119;172501;1011;0.4;96;-0.16;N/A;90.0;E;0.0;0.0;0;null;Partly
20190119;173001;1011;0.3;96;-0.26;N/A;67.0;ENE;2.2;0.7;0;null;Partly
20190119;173501;1011;0.2;96;-0.36;N/A;90.0;E;2.2;1.8;0;null;Partly
20190119;174001;1011;0.1;96;-0.46;N/A;90.0;E;2.2;0.7;0;null;Partly
20190119;174501;1011;0.0;96;-0.56;N/A;90.0;E;0.0;0.0;0;null;Partly
20190119;175001;1011;0.0;96;-0.56;N/A;22.0;NNE;2.2;0.7;0;null;Partly
20190119;175501;1011;-0.2;96;-0.76;N/A;22.0;NNE;2.9;1.8;0;null;Partly
20190119;180001;1011;-0.3;96;-0.86;N/A;22.0;NNE;2.2;0.7;0;null;Partly
20190119;180501;1011;-0.3;96;-0.86;N/A;22.0;NNE;2.2;0.4;0;null;Partly
20190119;181001;1011;-0.3;96;-0.86;N/A;22.0;NNE;2.2;1.8;0;null;Partly
20190119;181501;1011;-0.5;96;-1.06;N/A;34.0;NNE;2.2;0.7;0;null;Partly
20190119;182001;1011;-0.6;95;-1.30;N/A;67.0;ENE;0.0;0.0;0;null;Partly
20190119;182501;1011;-0.7;96;-1.26;N/A;67.0;ENE;0.0;0.0;0;null;Partly
20190119;183001;1011;-0.6;96;-1.16;N/A;79.0;ENE;0.0;0.0;0;null;Partly
20190119;183501;1011;-0.6;96;-1.16;N/A;112.0;ESE;3.6;1.4;0;null;Partly
20190119;184001;1011;-0.8;96;-1.36;N/A;112.0;ESE;2.2;0.7;0;null;Partly

Hors ligne

#2 Le 21/01/2019, à 09:04

diesel

Re : Trouver la valeur numérique la plus basse dans un CSV

Déjà, le

cat fichier | grep xxx

ne sert à rien qu'à allonger la durée d'exécution.

grep xxx fichier

donne le même résultat plus rapidement (et avec une moindre occupation mémoire).

Et pour extraire des champs d'un fichier csv, je te suggère de regarder vers la commande cut.

Amicalement.

Jean-Marie

Dernière modification par diesel (Le 21/01/2019, à 09:08)


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#3 Le 21/01/2019, à 09:13

pingouinux

Re : Trouver la valeur numérique la plus basse dans un CSV

Bonjour,
Chez moi, le tri est correct.
Tu peux effectivement beaucoup simplifier ta commande. J'essaierai de regarder ça plus tard.

Hors ligne

#4 Le 21/01/2019, à 09:19

diesel

Re : Trouver la valeur numérique la plus basse dans un CSV

Si ton sort ne marche pas, c'est une question de $LOCALE.

Insère un

sed -e "s/\./,/g |

avant ton

sort -n

et tu verras que ça ira mieux.

Amicalement.

Jean-Marie

Dernière modification par diesel (Le 21/01/2019, à 09:20)


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#5 Le 21/01/2019, à 09:46

pingouinux

Re : Trouver la valeur numérique la plus basse dans un CSV

@diesel83140 #4 :
Bien vu. J'ai une version anglaise de ubuntu.

Hors ligne

#6 Le 21/01/2019, à 10:32

diesel

Re : Trouver la valeur numérique la plus basse dans un CSV

pingouinux a écrit :

@diesel83140 #4 :
Bien vu. J'ai une version anglaise de ubuntu.

Il vous en prie. wink smile smile smile

Amicalement.

Jean-Marie


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#7 Le 21/01/2019, à 11:26

julien01

Re : Trouver la valeur numérique la plus basse dans un CSV

Merci !
Effectivement c'est juste le fait que la décimale soit représenté par un point et non une virgule, ça fonctionne beaucoup mieux.

Après je suis tout a fait de votre avis quant à l'optimisation de la commande smile

Hors ligne

#8 Le 21/01/2019, à 11:54

pingouinux

Re : Trouver la valeur numérique la plus basse dans un CSV

julien01 #7 a écrit :

Après je suis tout a fait de votre avis quant à l'optimisation de la commande

Il faudrait que tu précises ce que tu veux exactement.

julien01 #1 a écrit :

trouver les valeurs mini et maxi de température d'une journée en affichant sa date et son heure

Ta commande en #1 ne retourne que la température; veux-tu aussi la date et l'heure ?

À quoi ressemble une ligne contenant "no data" ?

Hors ligne

#9 Le 21/01/2019, à 15:49

pingouinux

Re : Trouver la valeur numérique la plus basse dans un CSV

À adapter en fonction de tes réponses à mes 2 questions en #8.

dat=20190119
LC_NUMERIC=C sort -t\; -nk4 fichier.csv | sed -n "/no data/b;/^$dat/{p;q}" | awk -F\; '{print $4,$1,$2}'

Édité : Ajout de LC_NUMERIC=C

Dernière modification par pingouinux (Le 21/01/2019, à 16:05)

Hors ligne

#10 Le 21/01/2019, à 16:24

Watael

Re : Trouver la valeur numérique la plus basse dans un CSV

meh !

$ awk -F ';' 'date[$1]["min"]>$4{date[$1]["min"]=$4}date[$1]["max"]<$4{date[$1]["max"]=$4}END{for(i in date)print i"= min: "date[i]["min"]"; max: "date[i]["max"]}' /tmp/meteo.csv
20190119= min: -5.4; max: 1.4

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

Hors ligne