Hallo, wie kann ich mit AWK in einem File nach Strings suchen und diese nacheinander in das gleiche Logging ausgeben? Mit der Version werden ja zwei Ziele angelegt. Wie kann man die Suche gestalten, so dass die ganzen Antworten nacheinander in einem Ziel landen? gawk "/Suchwort1/{print(substr($9,1,6))}" Quelle.txt > Ziel1.txt gawk "/Suchwort2/{print(substr($9,1,4))}" Quelle.txt > Ziel2.txt Danke sehr! Klaus
Vielleicht so? gawk "/Suchwort1/{print(substr($9,1,6))}" Quelle.txt > Ziel1.txt gawk "/Suchwort2/{print(substr($9,1,4))}" Quelle.txt >> Ziel1.txt
oder so:
1 | gawk "/Suchwort1/{print(substr($9,1,6))}; /Suchwort2/{print(substr($9,1,4))}" Quelle.txt > Ziel1.txt |
Je nachdem was "nacheinander" bedeutet.
Hallo ich greife mal die Frage auf. Wenn man es so nutzt: gawk "/Suchwort1/{printf(substr($9,1,6))}; /Suchwort2/{printf(substr($9,1,4))}" Quelle.txt > Ziel1.txt werden die einzelnen Strings nacheinander in das Zielfile geschrieben. Jedoch bekomme ich es nicht hin, dass er nach den 2 Suchwort eine neue Zeile beginnt. (habe \n genutzt ... leider geht es nicht so wie es soll) Hat jemand einen Tipp? Danke
Das printf in awk verhaelt sich so wie das in C.
1 | gawk "/Suchwort1/{printf("%s\n", substr($9,1,6))}; |
2 | /Suchwort2/{printf("%s\n", substr($9,1,4))}" Quelle.txt > Ziel1.txt |
Da hab ich mich zu früh bedankt. folgender Ausdruck: gawk "/Suchwort1/{printf("%s\t"), substr($5,1,3); /Suchwort2/{printf("%s\n",substr($5,1,5))}" Quelle.txt > Ziel.txt führt zu einem unterminated regexp beim printf.... Habe auch das Problem, dass die Nutzung von \n oder \t in den AUsdrücken nicht bearbeitet wird. Vielleicht ist mein Windows AWK doch nicht ganz kompatibel?
Ich hab mich da verschrieben: gawk "/Suchwort1/ {printf("%s"), substr($5,1,3)}; Suchwort2 {printf("%s\n"), substr($5,1,5)}" Quelle.tmp > Ziel.txt Und erhalte nun ein unexpected Newline {printf(/ ???
Fred schrieb: > Da hab ich mich zu früh bedankt. > folgender Ausdruck: > > gawk "/Suchwort1/{printf("%s\t"), substr($5,1,3); > /Suchwort2/{printf("%s\n",substr($5,1,5))}" Quelle.txt > Ziel.txt Da sind gleich zwei Fehler drin: 1. die Schließende Klammer beim ersten printf kommt schon nach dem Formatstring, gehört aber vor den Strichpunkt. 2. Du verwendest das gleiche Quote-Zeichen ("), um das awk-Programm von der Shell abzugrenzen und für die Formatstrings innerhalb des Programms. Das kann gut gehen, wenn die Inhalte "gutmütig" sind, Strings wie \n und \t gehören dazu aber nicht. Um auf der sicheren Seite zu sein, solltest Du für das awk-Programm aber entweder single-Quotes verwenden (falls Windows das kann) oder es gleich in eine separate Datei schreiben. Also entweder gawk '/Suchwort1/{... "%s\t" ...}; ...' oder gawk -f script.awk wobei script.awk dann so aussieht: /Suchwort1/{...} /Suchwort2/{...} Die Punkte sind natürlich jeweils durch den entsprechenden Programmtezt zu ersetzen. Bevor jetzt jemand kommt und sagt, da gibt es aber noch eine dritte Möglichleit (nämlich die "inneren" Gänsefüßchen mit Backslash zu quoten) — die habe ich bewußt weggelassen, weil damit das Programm sehr schnell sehr unübersichtlich wird, und man nicht mehr weiß, welcher Backslash und welches Dollarzeichen auf welcher Ebene interpretiert werden.
Den Schreibfehler hatte ich ja schon bemerkt. Die " Doppelverwendung war das Problem. Mit dem Skript File passt es nun. Danke
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.