如何使用awk从gpx文件创建表

时间:2014-04-10 18:58:45

标签: awk sh

我需要从gpx文件中创建一个只提取重要数据的表。以下是gpx文件格式的示例。

<?xml version="1.0" encoding="UTF-8"?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1">
<metadata>
</metadata>
<trk>
<name><![CDATA[Track2013/08/05_12:43]]></name>
<trkseg>
<trkpt lat="36.084275" lon="-115.137618">
<ele>653.926645</ele>
<time>2013-08-05T16:43:07Z</time>
<desc><![CDATA[lat.=36.084275, lon.=-115.137618, Alt.=653.926645m. Speed=0.000000m/h.]]></desc>
</trkpt>
<trkpt lat="36.084036" lon="-115.137834">
<ele>644.502060</ele>
<time>2013-08-05T16:43:12Z</time>
<desc><![CDATA[lat.=36.084036, lon.=-115.137834, Alt.=644.502060m. Speed=0.000000m/h.]]></desc>
</trkpt>

基本上,我需要在这种格式的表格中获取纬度,经度,海拔高度(或ele)和时间:

    Latitude Longitude Altitude Time
1   number   number    number   hour
2   more     more      more     more
3   etc

我使用

过滤掉了我不需要的东西
awk -F: ' $1 ~ /lat="/ || $1 ~ /long="/ || $1 ~ /<ele>/ || $1 ~ /<time>/ || <trkseg> { print} ' gpxfile

它基本上过滤掉了我不需要的东西,但我无法以正确的格式获得它。

1 个答案:

答案 0 :(得分:0)

您可以设置字段分隔符:

$ awk -F'[<>=" ]' '
BEGIN{print "Latitude", "Longitude", "Altitude", "Time"}
/<trkpt / {printf "%s %s %s ", ++x,$5,$9}
/<ele>/ {printf "%s ", $3}
/<time>/ {print $3}' file
Latitude Longitude Altitude Time
1 36.084275 -115.137618 653.926645 2013-08-05T16:43:07Z
2 36.084036 -115.137834 644.502060 2013-08-05T16:43:12Z