Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/12/2010, 10h11   #1
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 142
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 142
Points : 33
Points : 33
Par défaut Incrémentation d'une matrice xyz avec bash

Bonjour,

Je vous explique le problème :
J'ai une matrice contenant des points en coordonnées cartésiennes :
a 1 2 3
b 4 5 3
c 7 6 4

et je voudrais faire une grille c'est a dire pour a b et c générer toutes les géométries possibles en ajoutant de manière itérative par exemple 0,5 à tous les x dix fois et 0,2 à tous les y 20 fois. Soit 200 géométries différentes !

pour ça j'ai utilisé utilisé la commande awk:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
#!/bin/bash
 
 
ligne=1
x[0]=0.5
y[O]=0.1
while [[ $ligne -le 3 ]]
    do
 
x[$ligne]=$(awk -v varx=$ligne 'NR==varx {print $2 }' fichier) #récupère le nombre dans la deuxième colonne
y[$ligne]=$(awk -v vary=$ligne 'NR==vary {print $3 }' fichier)
 
x[$ligne]=` expr ${x[$ligne]} + ${x[0]} ` |bc
y[$ligne]=` expr ${y[$ligne]} + ${y[0]} ` |bc
 
echo  "x[$ligne] = " ${x[$ligne]}
echo  "y[$ligne] = " ${y[$ligne]}
 
 
((ligne++))
 
    done
Si j'ai bien compris le seul moyen de générer des variables dynamiques c'est d'utiliser un tableau mon problème c'est que les tableaux demandent un entier, lors de l'exécution j'ai cette erreur : expr: non-integer argument !
Comment puis-je faire pour effectuer des opérations dans les tableaux car je n'ai rien trouvé jusqu'à présent.
De plus si vous aviez des suggestions sur l'organisation des diverses boucles à faire je suis preneur (je pense qu'il en faut au moins deux, d'une manière générale j'ai du mal à voir comment les organiser)

En vous remerciant,
Erlen
Erlen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2010, 10h33   #2
Membre Expert
 
Avatar de jabbounet
 
frederic frances
Inscription : juin 2009
Messages : 1 703
Détails du profil
Informations personnelles :
Nom : frederic frances
Âge : 36

Informations forums :
Inscription : juin 2009
Messages : 1 703
Points : 2 115
Points : 2 115
un lien intéressant sur la manipulation des tableaux en bash
http://tldp.org/LDP/abs/html/arrays.html

bonne chance
__________________
BAZAR est un joyeux bordel improvisé ! Tous les mardis.
http://www.improetcompagnie.com/publ...ctacles-6.html

Citation:
Envoyé par Isaac Asimov
Pour réussir, il ne suffit pas de prévoir. Il faut aussi savoir improviser
Pour les utilisateurs d'emacs:
http://www.emacswiki.org/

Attends de voir ce qui vas sortir de:
http://www.pushmid.com
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2010, 15h04   #3
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 059
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 059
Points : 4 115
Points : 4 115
Bonjour Erlen,

Citation:
Code :
1
2
x[$ligne]=` expr ${x[$ligne]} + ${x[0]} ` |bc
y[$ligne]=` expr ${y[$ligne]} + ${y[0]} ` |bc
j'ai cette erreur : expr: non-integer argument
il semblerait que expr, comme bash, ne sait pas faire d'opérations arithmétiques avec des nombres à virgules...
plus, pourquoi ensuite passer la "valeur" à bc ?
donc plutôt :
Code :
1
2
x[$ligne]=$(echo "${x[$ligne]} + ${x[0]}" |bc)
y[$ligne]=$(echo "${y[$ligne]} + ${y[0]}" | bc)
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/12/2010, 16h01   #4
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 142
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 142
Points : 33
Points : 33
Je vous remercie pour ta réponse N_bas qui m'a bien aidé.
En fait je me rends compte que mon plus gros problème est en fait la conception du script dans sa globalité. J'ai du mal à concevoir la structure :
J'ai le fichier totox0y0 et de là il faudra générer les fichiers totox0y1 totox0y2
totox0y3 ...
puis totox1y0 ...
totoxnyn
J'ai du mal à voir comment emboîter les boucles les unes dans les autres
c'est sans doute
boucle modification des x
boucle modification des y
fin de boucle modification des y
fin de boucle modification des x
Est-ce que j'en ai besoin de plus ?
Erlen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2010, 16h26   #5
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 059
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 059
Points : 4 115
Points : 4 115
Code :
1
2
3
4
5
6
7
8
9
#!/bin/bash
 
while read ref1 ref2 x y
do echo -n "$ref1 | $ref2 | $x "
   for ((n=0; n<10; n++)); do x=$(echo "$x + 0.5" |bc); echo -n "$x "; done
   echo -n "| $y "
   for ((n=0; n<20; n++)); do y=$(echo "$y + 0.2" |bc); echo -n "$y "; done
   echo "|"
done < Erlen.in
...
?
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/12/2010, 20h55   #6
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 142
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 142
Points : 33
Points : 33
Merci pour tous tes conseils j'ai fini ça marche impek.
Et ca me faire gagner un temps FOU !! parce que 15 lignes à modifier dans 400 fichiers ça en fait du travail !!!
Vive les scripts !!
Erlen est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h37.


 
 
 
 
Partenaires

Hébergement Web