Pages : 1
#1 Le 18/08/2012, à 17:32
- ourobolos
bash sed, gpx vers csv
Bonjour,
J'ai un fichier gpx que je voudrais transformer en csv de la forme :
lat lon ele time hdop
Le gpx est de la forme
<trkpt lat="45.198013995575984" lon="5.731368709556624">
<ele>274.0</ele>
<time>2012-08-16T08:01:19Z</time>
<hdop>12.5</hdop>
</trkpt>
J'avais commencé après une recherche sur le forum par ceci :
sed -n 's#.*<\(ele\)>\([^<]\+\)</\1>.*#\2#p' $1 >ele
sed -n 's#.*<\(time\)>\([^<]\+\)</\1>.*#\2#p' $1 >time
sed -n 's#.*<\(hdop\)>\([^<]\+\)</\1>.*#\2#p' $1 >hdop
sauf qu'après avoir séparé ces variables en fichiers, il fallait encore les rassembler à nouveau, sans compter que je n'avais pas encore trouvé la bonne ligne pour lat et lon ; et qu'il doit certainement exister plus astucieux pour faire ce que je cherche.
edit : mauvaise section je pense, ça irai mieux dans « Terminal, scripts et ligne de commande » non ?
Dernière modification par ourobolos (Le 18/08/2012, à 18:11)
Hors ligne
#2 Le 18/08/2012, à 21:04
- pingouinux
Re : bash sed, gpx vers csv
Bonjour,
Pour info, les valeurs trouvées peuvent être mises dans des variables :
ele=$(sed -n 's#.*<\(ele\)>\([^<]\+\)</\1>.*#\2#p' $1)
time=$(sed -n 's#.*<\(time\)>\([^<]\+\)</\1>.*#\2#p' $1)
hdop=$(sed -n 's#.*<\(hdop\)>\([^<]\+\)</\1>.*#\2#p' $1)
lat=$(sed -n 's#.*\blat="\([^"]\+\)".*#\1#p' $1)
lon=$(sed -n 's#.*\blon="\([^"]\+\)".*#\1#p' $1)
Hors ligne
#3 Le 19/08/2012, à 14:21
- ourobolos
Re : bash sed, gpx vers csv
merci, je m'en suis sorti avec paste pour remettre mes colonnes dans ne même fichier
Hors ligne
#4 Le 19/08/2012, à 22:11
- Watael
Re : bash sed, gpx vers csv
salut,
voici un tatonnement en sed
sed -n 'N;N;N;s/\n//g;s/[^"]*"//; s/"[^"]*"/ /; s/">[^>]*>/ /; s/<[^>]*>[[:blank:]]*/ /g;p' fichier.gpx
45.198013995575984 5.731368709556624 274.0 2012-08-16T08:01:19Z 12.5
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
Pages : 1