demande de conseil pour optimiser mon script
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:
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:
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