Hallo, 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 -- [ls?] command not found? [..] Das ist ein kleiner Ludwig, gefolgt von einem kleinen Siegfried (zwei muntere Recken, die auszogen, den Drachen zu schrecken). Keine Ida, denn Burgfräulein haben in Heldenrunden nix verloren. Mach einfach mal nur ls (Ludwig-Siegfried, nicht Ida-Siegfried, das könnte unanständig werden *g*), [..] -- Philipp Zacharias in suse-linux -- 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