extraction valeur min et max d'une colonne?

extraction valeur min et max d'une colonne? - Shell/Batch - Programmation

Marsh Posté le 28-02-2007 à 20:22:14    

Bonjour,  
j'ai un petit soucis j'aimerais extraire la valeur la plus faible et la plus forte d'une colonne pour m'en servir apres dans la creation d'une échelle de couleur or je ne sais pas comment faire pour les extraire?
 
Dans un fichier, j'ai 3colonnes (latitude, longitude et champ magnétique) de valeurs  que je peux ouvrir avec Xemacs.
Dans un autre fichier je demande qu'il me trace le champ magnétique en fonction de la latitude et longitude
Dans la derniere colonne (valeurs decimales) j'aimerais donc recuperer la valeur minimale et maximale pour tracer mon echelle de couleur car j'aimerais appliquer ce fichier à dautres fichiers à 3colonnes
 
Ben pour l'instant j'ai pas essayé ce que vous m'avez conseillé car je ne sais pas comment l'ecrire
 
mon code pour tracer mes cartes , où je veux introduire min et max
 
 
Code:
!/bin/csh
 
#je vais essayer d'extraire dans les fichiers .vec toutes les donnees de la region d'apollinaris patera
 
/* petit fichier permettant de me tracer les composantes du champ magnetique que l'on a pu predire!*/
set width = 5
  set lon_min = -10
  set lon_max = 10
  set lat_min = -10
  set lat_max = 10
set region = -R$lon_min/$lon_max/$lat_min/$lat_max
 
 
awk '{print$1,$2,$4}' calcul_dipole2.vec >! dipole2_br.vec
 
makecpt -Cno_green -T-1500/1500/500 -Z >! color1.cpt  ==> la à la place de 1500 j'aimerais le remplacer par un truc qui a chaque fois que je lance ça pour une autre zone d'etude,  ça me donne les valeur min et max !
mon fichier dipole2_br.vec ==> provient d'un code qui me calcule le champ Br pour une zone en latitude de -10 10 et -10 10 en longitude
 
 
Code:
-10.000000 -10.000000 4.933323784
-10.000000 -9.000000 5.367579746
-10.000000 -8.000000 5.735052237
-10.000000 -7.000000 5.980566054
-10.000000 -6.000000 6.037799353
-10.000000 -5.000000 5.836437190
-10.000000 -4.000000 5.315204053
-10.000000 -3.000000 4.439723355
-10.000000 -2.000000 3.220808505
-10.000000 -1.000000 1.725745953
-10.000000 0.000000 0.075055400
-10.000000 1.000000 -1.578019364
-10.000000 2.000000 -3.079919733
-10.000000 3.000000 -4.309267789
-10.000000 4.000000 -5.197595565
-10.000000 5.000000 -5.732847792
-10.000000 6.000000 -5.948314683
-10.000000 7.000000 -5.904461521
-10.000000 8.000000 -5.671095180
-10.000000 9.000000 -5.314292932
-9.000000 -10.000000 5.969985182
-9.000000 -9.000000 6.607356817
-9.000000 -8.000000 7.187623618
-9.000000 -7.000000 7.635294200
-9.000000 -6.000000 7.852688403
-9.000000 -5.000000 7.728076196
-9.000000 -4.000000 7.154633830

Reply

Marsh Posté le 28-02-2007 à 20:22:14   

Reply

Marsh Posté le 01-03-2007 à 22:54:40    

Awk me parrait pas mal pour ça
 
Dans ton script csh essaye qqch comme ça :

Code :
  1. min=`awk '{min_val=($1>min_val)?min_val:$1;} END{print min_val;}' [le nom du fichier]`
  2. max=`awk '{max_val=($1<max_val)?max_val:$1;} END{print min_val;}' [le nom du fichier]`


en remplaçant $1 par la bonne colonne
 
Voilà voilà

Reply

Marsh Posté le 06-04-2007 à 17:48:51    

Bonjour,
 
Ca marche! Je cherchais exactement la meme fonction. Est-il possible d'obtenir egalement l'index de la colonne ou on a le maximum?
 
Merci
 
Cédric

Reply

Marsh Posté le 08-04-2007 à 14:34:26    

cedric912 a écrit :

Bonjour,
 
Ca marche! Je cherchais exactement la meme fonction. Est-il possible d'obtenir egalement l'index de la colonne ou on a le maximum?


 
Oui, il suffit de mémoriser "NR" (le n° de ligne) au moment où tu tombes sur la bonne valeur
Ex:

Code :
  1. min=`awk '{if ($1 <= min_val) {min_val=$1; index=NR}} END {print min_val:index}' nom_fic`
  2. max=`awk '{if ($1 >= max_val) {max_val=$1; index=NR}} END {print max_val:index}' nom_fic`


en remplaçant $1 par la bonne colonne => ça te donnera da valeur suivi de ":" puis la position


Message édité par Sve@r le 08-04-2007 à 14:35:06

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed