bonjour,
voilà, je suis débutant en bash. ceci est en fait mon 1er script. ça m'a pris quelques jours pour en arriver là (et quelques posts sur le forum).
le résultat fait exactement ce que je veux mais est incroyablement lent. mon pc n'est pas une bête de compét, mais à la vitesse où ça avance, il y en a pour plusieurs jours de calcul....
je me dis que je n'ai pas forcément choisi les solutions les plus rapides de calcul. mais pour l'instant, je n'en connais pas d'autres...
alors, ce serait sympa si quelqu'un pouvait me donner quelques pistes pour optimiser mon script
ce script fait des profils swath (sur une bande de 10km de large, on calcule l'altitude moyenne, les valeurs min et max; et ceci pour chaque point du profil (environ une valeur tous les 90mètres, sur un profil d'environ 350km de long)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 # definition du nom de sortie à partir des coordonnées de la coupe separe1_name=$(echo $start_proj | awk -F "/" '{print $1}') separe2_name=$(echo $start_proj | awk -F "/" '{print $2}') separe3_name=$(echo $end_proj | awk -F "/" '{print $1}') separe4_name=$(echo $end_proj | awk -F "/" '{print $2}') name_output=$separe1_name"-"$separe2_name"-"$separe3_name"-"$separe4_name >mean_$name_output.txt >min_$name_output.txt >max_$name_output.txt mean_y=0 min_y=10000 max_y=0 compteur=0 while read pos val do x=$(printf "%.2f\n" $pos) #on arrondit pos à 2 chiffres après la virgule y=$(printf "%.2f\n" $val) #on arrondit val à 2 chiffres après la virgule if [ $(echo "$y < 0.00" | bc) -eq 1 ]; then #on élimine z négatif et NaN y=0 #si le test est vrai (y<0),il renvoie 1 fi #on remplace y par 0
# du à l'effet combiné de l'arrondi des valeurs (par printf) issues de gmt_project, des valeurs correspondant à la même ligne de SRTM sont quelquefois espacées de 0.01. on fait donc un test: si seulement l'écart est supérieur à 0.01, on considère qu'on est passé à une nouvelle ligne de données)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 diff=$(echo "$x-$i" | bc) if [ $(echo "$diff <= 0.01" | bc) -eq 1 ] then mean_y=$(echo "$mean_y+$y" | bc) ((compteur = $compteur + 1)) if [ $(echo "$y < $min_y" | bc) -eq 1 ]; then min_y=$y fi if [ $(echo "$y > $max_y" | bc) -eq 1 ]; then max_y=$y fi else mean_y=$(echo "$mean_y/$compteur" | bc) echo $i $mean_y >> mean_$name_output.txt echo position:$i moyenne:$mean_y min:$min_y max:$max_y compteur:$compteur echo $i $min_y >> min_$name_output.txt echo $i $max_y >> max_$name_output.txt i=$x # on change la valeur de i mean_y=$y max_y=$y min_y=$y compteur=1 fi done < $fich
merci d'avance,
seb
Partager