[commande AWK] problème de traitement

Résolu/Fermé
menosgrande - 9 nov. 2005 à 14:33
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 - 9 nov. 2005 à 19:11
Bonjour,

J'ai un problème sur l'extraction de donnée avec awk.
J'ai bien cherché des tutorials mais rien de probant ni de complet.


Soit le fichier exemple c1.jpr suivant:
cr=(c) IGN TOP25 a 100 pour cent
dm=WGS84
sc=25000
pr=UTM
zn=31T
rp1= 48.71, 6.12, 0, 0
rp2= 49.71, 6.16, 0, 0
rp3= 42.71, 3.19, 0, 0
rp4= 43.71, 8.122, 0, 0



La partie qui m'intéresse sont les 4 coordonées définis par données par par rp1, rp2..
ici ce sont:
48.7175405333908aaa, 6.14142420349669



donc je voulais extraire les coordonnés avec la commande:
awk '/[0-9]+\.[0-9]*/ {print $2}' c1.jpr


il me sort bien la 2ieme colonne (print $2)mais sans tenir compte semble t-il de
l'expression réguliere ou plutot seulement en partie.
donc j'ai en résultat:

48.71,
49.71,
42.71,
43.71,


Or je voudrais récupérer les 4 chiffres décimaux des coordonnées dans un autre fichier sans la virgule.


Deuxième difficulté:

Il ya plusieurs cartes .jpr situés directemenbt dans x sous répertoire(s) placés dans le repetoire courant.


représenté ainsi

repertoire courant
|
|_directory1: c1.jpr c2.jpr....
|
|-directory2: c3.jpr c4.jor..
.
.
.

Je parviens a faire un bash qui lance 1 traitement sur tous les fichiers d'extension .jpr du répertoire courant (avec un for each) mais comment traiter les fichiers situés juste dans les sous répertoires?


Milles Mercis d'avance a tous!

Sylvie
A voir également:

3 réponses

Phiphi57 Messages postés 789 Date d'inscription samedi 26 février 2005 Statut Contributeur Dernière intervention 19 juillet 2009 295
9 nov. 2005 à 14:56
Salut!

bon, alors, au cas où, je te propose deux petites solutions pas tres propre, j'imagine que tu auras beaucoup plus élégant...

1/ tu places tes résultats dans un fichier temporaire (>fich_temp ou >>fich_temp selon ce que tu préferes), puis tu rééxecute awk , avec la virgule "," comme séparateur, et un print $1 .

2/ for i in */*.jpr ??
voire meme :
for i in * */* */*/* */*/*/* */*/*/*/*
do
laManipAFaire
done
mais le plus propre reste peut etre :
for i in `find . -name "*.jpr"`
do
echo $i
ManipSur$i
done
ca devrait te donner tous les fichiers .jpr dans l'arborescence

Phiphi
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 426
9 nov. 2005 à 18:48
Salut

Rapidement, pour awk, si j'ai bien compris ce que tu veux:
awk 'BEGIN{ FS = "= "} /^rp/{print $2}' file
Ici, tout ce qui commence par rp on affiche la seconde colonne avec comme séparateur =space.

Ta commande plus haut prenait la virgule pour un séparateur, il aurait fallut faire un "{ print $2 $3 $4" etc.

Maintenant, si tu veux pouvoir simplement manipuler ces données (passer de .tab à .tfw ou l'inverse, ou tout autre manip qu'on peut-etre ammener à faire avec un SIG )
Cette commande est interessante:
awk 'BEGIN{ FS = "= |, "} /^rp/{print "w="$2" x="$3" y="$4" z="$5 }'
on ne traite toujours que les lignes commencant par pr mais en utilisant '=space' et ',space' commme séparateur, tu récupères dans 4 variables les valeurs numeriques des 4 composantes de tes coordonnées.

++
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 426
9 nov. 2005 à 19:11
Pour le deuxieme point

Il faudrait préciser un peu, mais si tu veux passer la même commande sur tout les fichiers de l'arbo, en reprenant mon dernier awk, on peut trés bien imaginer un:
find /ton/repertoire/de/base -name '*.jpr' -exec awk 'BEGIN{ FS = "= |, "} /^rp/{print "w="$2" x="$3" y="$4" z="$5 }' {} \;
ça devrait fonctionner, a toi de voir ce que tu souhaite exactement ;)
++
0