Am Do, 19 Apr 2012 05:58:14 CEST schrieb David Haller: Hallo David,
Am Thu, 19 Apr 2012, ?l ??gn?r schrieb:
Am Mi, 18 Apr 2012 23:30:01 CEST schrieb David Haller:
Am Wed, 18 Apr 2012, ?l ??gn?r schrieb:
Was wäre die einfachste Methode um nur gpx-Dateien mit zB <type>Trekking</type> auszuwählen? Geht das nur mit einer Schleife? Aber vermutlich braucht man die sowieso.
grep -l '<type>Trekking' *.gpx | xargs [..]
Wie summiere ich die einzelnen Werte am besten?
$ awk '/<desc>.*<p>Distanz:/ { d = gensub(/.*<p>Distanz: *([0-9,.]+) *km.*/,"\\1",1,$0); gsub(",",".",d); sum+=d; } END{ printf("%f\n", sum); }' *.gpx 7.000000
grep -l '<type>Trekking' *.gpx | xargs
Mir ist noch nicht so recht klar wie ich mit xargs dann deine awk-Konstrukt aufrufe.
grep -FZl '<type>Trekking' *.gpx | xargs -r -0 awk ...
(-F wg. Performance, -Z / xargs -r0 wg. Robustheit ggü. komischer Dateinamen).
Alternativ könntest du auch awk nach dem Trekking filtern lassen, wo kommt das denn vor in der Datei? Immer vor <desc>?
awk ' /<type>Trekking/ { trekking = 1; } /<type>Unbestimmt/ { nextfile; } ### nur falls <type> nur einmal pro ### Datei vorkommt /<desc>.*<p>Distanz:/ { d = gensub(/.*<p>Distanz: *([0-9,.]+) *km.*/,"\\1",1,$0); gsub(",",".",d); sum+=d; } END { printf("%f\n", sum); }' *.gpx
Und wenn nicht:
awk ' /<type>Trekking/ { trekking = 1; } /<type>Unbestimmt/ { nextfile; } ### nur falls <type> nur einmal pro ### Datei vorkommt /<desc>.*<p>Distanz:/ { d = gensub(/.*<p>Distanz: *([0-9,.]+) *km.*/, "\\1", 1, $0); gsub(",", ".", d); } FILENAME != _oldfilename && trekking == 1 { sum += d; _oldfilename = FILENAME; } END { printf("%f\n", sum); }' *.gpx
Alles ungetestet. Möglicherweise ist grep + awk bzw. grep -F + awk schneller als awk alleine. Achso, das obige dann in ein awk-Script giessen:
==== /usr/bin/gawk -f /<type>Trekking/ { trekking = 1; } [..] END { ..; } ====
chmod 700, in den PATH legen (z.B. nach ~/bin/) und aufrufen ;) Evtl. mußt du in der Datei noch das \\1 durch \1 ersetzen, ich vergess immer, wie man das schreibenn muß.
HTH, -dnh
Ich schick dir Beispieldateien per PM und ich bin mir nicht sicher, ob man sich darauf verlassen sollte, ob es davor oder danach steht. -- Αl -- 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