[commande AWK] problème de traitement
Résolu
menosgrande
-
asevere Messages postés 13095 Date d'inscription Statut Webmaster Dernière intervention -
asevere Messages postés 13095 Date d'inscription Statut Webmaster Dernière intervention -
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:
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:
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:
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
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:
- [commande AWK] problème de traitement
- Invite de commande - Guide
- Reconsidérer le traitement de vos informations à des fins publicitaires - Accueil - Réseaux sociaux
- Commande terminal mac - Guide
- Traitement de texte gratuit - Guide
- Ce logiciel gratuit et léger est parfait pour remplacer Word, même sur un vieux PC - Guide
3 réponses
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
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
Salut
Rapidement, pour awk, si j'ai bien compris ce que tu veux:
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:
++
Rapidement, pour awk, si j'ai bien compris ce que tu veux:
awk 'BEGIN{ FS = "= "} /^rp/{print $2}' fileIci, 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.
++
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:
++
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 ;)
++