[Talk-de] Mapping Workflow mit Garmins nüvi550
Wolfgang
osm at kahl-hinsch.de
Fr Jul 10 19:28:19 UTC 2009
Am Donnerstag, 9. Juli 2009 21:35:54 schrieb Tobias Hägele:
> Hallo,
>
> erstmal vielen Dank für deine Mühe.
>
> Leider funktioniert deine Anleitung bei mir nicht.
>
> Wolfgang schrieb:
> > Am Freitag, 26. Juni 2009 12:22:28 schrieb Ingo Lantschner:
> >> c. Gibt es schon ein Tool für den Export wie oben beschrieben?
> >
> > c) kurz gebastelt:
> >
> > sed \
Aufruf von sed (siehe man sed), der Backslash muss letztes Zeichen vor dem
Zeilenwechsel sein (der dadurch nicht beachtet wird)
> > -e 's/<trk>/\n<trk>/g' \
Füge vor jedem <trk> (Trackbeginn-Zeichen) einen Zeilenwechsel ein
> > -e 's/<\/trk></<\/trk>\n</g' \
Füge hinter jedem </trk> (Trackende), auf das ein < folgt, einen Zeilenwechsel
ein. Das erfolgt nur nach dem letzten Track, da die anderen Tracks ja bereits
abgetrennt sind. Bei mir stehen in der Current.gpx hinter dem letzten Track
noch einige Daten zu Wegepunkten etc.
> > $1 | \
gibt den Filenamen an, von dem sed lesen soll, und schreibt das Ergebnis in
die Leseschlange des nächsten Befehls
> > sed \
wiederum ein sed
> > -e '1d' \
> > -e '$d' \
der die erste und letze Zeile löscht (Zeilen ohne Track)
> >
> >> temp.gpx
geht bestimmt eleganter, aber das Zwischenergebnis ist die temp.gpx, in der
bereits jeder Track in einer eigenen Zeile steht
> >
> > nn=`cat temp.gpx|wc -l`
nn = Anzahl der Zeilen (=tracks) der temp.gpx (Hochkomma ist rückwärts!)
Zur Fehlersuche : "echo $nn" einfügen. Ist nn 0 oder nicht gesetzt, stimmt
hier etwas nicht (Hochkomma rückwärts z.B.)
> > nx=1
> > while [ "$nx" -le "$nn" ]
> > do
> > sed -n -e "$nx wtrack$nx.gpx" temp.gpx
sed schreibt nichts in die Standardausgabe, schreibt zeile nx (mit nx=1,
nx=2 ...) in eine eigene Datei mit namen track1.gpx, track2.gpx ...
> > (( nx++ ))
Zählt Variable nx hoch
> > done
>
> Ich hab das mal so, mit einem #!/bin/bash davor, in eine Datei kopiert,
Steht die Zeile mit der bash wirklich in der allerersten Zeile?
> diese dann als test.sh gespeichert und mit chmod +x ausführbar gemacht.
>
> aufrufen tu ich das ganze dann mit #sh test.sh Current.gpx
>
> Als Ergebnis erhalte ich dann die besagte temp.gpx, in ihr ist alles ab
> der zweiten Zeile der Original gpx enthalten. Auch Zeilen in denen kein
> trk enthalten ist.
Möglicherweise ist deine current.gpx anders aufgebaut, so dass zwischen den
Tracks noch weitere Daten stehen? Was gibt "wc -l temp.gpx" ?
> Dann entsteht noch die Datei track1.gpx, in der der Inhalt der ersten
> Zeile der temp.gpx enthalten ist.
> Und von da an spuckt mir das terminal in endloschschleife folgendes
> entgegen:
> test.sh: 17 nx++: not found
deutet darauf hin, dass nicht bash benutzt wird. Innerhalb der doppelten
runden Klammern funktioniert eine ganze Reihe von C-Rechenoperationen, aber
nur in bash, nicht in der c-/korn-/k&r-...-shell.
>
> Ich bin ratlos
Starte mal eine interaktive bash. Teste folgende Befehle direkt auf der
Kommandoebene, das Bild muss danach so aussehen:
$ nx=1
$ (( nx++ ))
$ echo $nx
2
$
Wenn du nicht die 2 erhälst, musst du an der Stelle weitersuchen. Achte genau
auf alle Blanks. nx=1 ohne Blank, ((_nx++_)) mit 2 Blanks.
Klappt das, führe das script direkt in der bash aus.
>
> > Alternative für Geübte in vi/gvim, wobei [[strg]] die strg-Taste meint:
> > :s/<trk>/[[strg]]vm<trk>/g
Doppelpunkt, Cursor springt in die unterste Zeile, dann Klartext s/<trk>/,
dann strg-Taste drücken und festhalten, vm, strg-Taste loslassen, Klartext
<trk>/g
Bedeutet: Tausche <trk> gegen Zeilenwechsel<trk> aus
Mit der Kombination strg-v weiß vim, dass jetzt ein Kontrollzeichen kommt. Die
Anzeige wechselt auf ^, mit dem m auf ^M, das ist der Zeilenwechsel.
Das abschließende /g führt den Befehl für jedes Vorkommende <trk> aus.
> > :1,$ s/<\/trk></<\/trk>[[strg]]vm<
Fügt nach dem letzten Track einen Zeilenwechsel ein.
> > :1 w track1
> > :2 w track2
schreibt Zeile 1 in Datei track1 ...
Alternative: springe direkt auf die Track-Zeile und :w track1 für den ersten
etc...
> >
> > ...
>
> Nunja, geübt bin ich nicht wirklich... Was genau soll ich mit der
> Strg-Taste machen? einmal drücken? gedrückt halten? Egal was, bei mir
> tut sich nichts, mit glück bekomme ich ein "Ausdruck nicht gefunden"
> aber das wars.
>
Achte darauf, dass im 2. Austauschbefehl im </trk> der Slash durch einen
Backslash maskiert werden muss, damit er nicht zum Trennzeichen des
Austauschbefehls wird. \/
Versuch das erst mal mit einem kleinen Probesatz.
Viel Glück,
Wolfgang
Mehr Informationen über die Mailingliste Talk-de