#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
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
@diesel83140 #4 :
Bien vu. J'ai une version anglaise de ubuntu.
Il vous en prie.
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
Hors ligne
#8 Le 21/01/2019, à 11:54
- pingouinux
Re : Trouver la valeur numérique la plus basse dans un CSV
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.
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