Hallo, Am Thu, 19 Apr 2012, ?l ??gn?r schrieb:
Am Do, 19 Apr 2012 05:58:14 CEST schrieb David Haller:
Alternativ könntest du auch awk nach dem Trekking filtern lassen, wo kommt das denn vor in der Datei? Immer vor <desc>?
Anscheinend immer danach. [..]
Ich schick dir Beispieldateien per PM und ich bin mir nicht sicher, ob man sich darauf verlassen sollte, ob es davor oder danach steht.
==== [etwas kompakt formatiert, geht auch besser] ==== #!/usr/bin/gawk -f # Aufruf: ./trekking.awk [-vU=1] *.gpx BEGIN { ### -vU=1 -> "<type>Ungestimmt" mitsummieren, ggfs. kann man den ### default hier ändern, dann z.B. mit -vU=0 "nicht mitsummieren _sum_unbestimmt = U != "" ? U : 0; } ### Achtung, hier kommt's auf die Reihenfolge an, dieser Block muß ### mind. VOR dem got_type == 1 && got_desc == 1 Block kommen! FILENAME != _oldfilename { if(trekking == 1) { sum += d; } trekking = got_desc = got_type = 0; _oldfilename = FILENAME; } /<type>Trekking/ { got_type = 1; trekking = 1; } /<type>Unbestimmt/ { got_type = 1; if(_sum_unbestimmt == 1) { trekking = 1; } nextfile; } /<desc>.*<p>Distanz:/ { got_desc = 1; d = gensub(/.*<p>Distanz: *([0-9,.]+) *k?m.*/, "\\1", 1, $0); gsub(",", ".", d); } got_type == 1 && got_desc == 1 { ### wenn type und desc gelesen, Rest überspringen, summiert ### wird im FILENAME != .. bzw. im END Block nextfile; } END { if(trekking == 1) { sum += d; } printf("%f\n", sum); } ==== Das solltest robust sein (Reihenfolge type/desc egal), und relativ schnell, wenn type und desc gefunden sind wird der (recht große) Rest der Datei übersprungen. Wenn du das Script z.B. als 'sum_gpx_dest.awk' ablegst und ausführbar machst ist dann der Aufruf z.B.: ./sum_gpx_dest.awk *.gpx oder ./sum_gpx_dest.awk -vU=1 *.gpx Mit deinen Testdateien tut's jedenfalls ;) Achso, die Einheit der Distanz wird jetzt ignoriert, alle Dateien müssen also die gleiche haben. Bei Bedarf könne man noch recht einfach die Einheit parsen und z.B. alles auf Meter umrechnen und die Ausgabe z.B. ab 1000m in km ausgeben, sonst als Meter ;) HTH, -dnh -- Persönliche Daten sind wie Plutonium. Wenn zuviele davon auf einem Haufen liegen, wird es kritisch. -- Dirk Engeling, CCC -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org