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 _______________________________________________ Talk-de mailing list [email protected] http://lists.openstreetmap.org/listinfo/talk-de

