Hallo, Am Mit, 15 Sep 2010, Andre Tann schrieb:
Andre Tann, Mittwoch 15 September 2010:
David Haller, Dienstag 14 September 2010:
find . -type f -exec gawk ' BEGIN { N = NUM_WORDS; } /wort1/ && ! words[1] { words[1]=1; } /wort2/ && ! words[2] { words[2]=1; }
^^^^^^^^^^^^^ Verstehe ich das richtig: Du prüfst damit, ob words[2] schon gesetzt ist. Wozu? Woher sollte es gesetzt sein?
OK, Denkfehler.
Meinerseits.
Die Schleife wird ja für jede Zeile durchlaufen, also öfter, also könnte es vom vorherigen Durchlauf gesetzt sein.
Hm, da hast du wohl recht. So klappts: find . -type f -exec gawk ' function endfile() { if( words[1] && words[2] && words[3] ) { print lastfile; } } lastfile != FILENAME { endfile(); words[1] = 0; words[2] = 0; words[3] = 0; lastfile = FILENAME; } /wort1/ { words[1]=1; } /wort2/ { words[2]=1; } /wort3/ { words[3]=1; } END { endfile(); } ' '{}' +
Trotzdem die Frage: Was würde es schaden, wenn ich words[1]=1 setze, auch wenn das zuvor schon gemacht wurde?
s.o. Wenn du willst kannst du zusätzlich noch die Treffer zählen, Muster: /wort1/ { words[1]++; } und: function endfile() { if( words[1] && words[2] && words[3] ) { print lastfile; print "wort1: " words[1]; print "wort2: " words[2]; } } Oder so ähnlich. Wobei man das auch noch besser schreiben könnte (statt numerisch durch die Regexe als string indizieren.
Davon abgesehen jage ich das Skript gerade durch mein Mailverzeichnis, und es wirft viel zu wenige Treffer aus. Ich habe nach /atann/ und /alphasrv/ gesucht, und da gibts genau sieben Treffer in ca. 20.000 Maildateien. Das ist etwas zuwenig... ;) Irgendwas stimmt da noch nicht.
Liegt an meinem Denkfehler, s.o. HTH, -dnh -- Power corrupts, PowerPoint corrupts absolutely. -- Vint Cerf -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org