Ich habe eine Textdatei mit einer Reihe von Daten gefüllt. Ich muss Zeilen herausziehen, die bestimmte Zeichenfolgen enthalten. Ich habe dies mit awk wie folgt erreicht:
awk '/pattern1|pattern2|pattern3/ {print;}' infile
Ich muss dann nach jeder dritten Zeile eine neue Zeile (\ n) einfügen. Also müsste es so aussehen
pattern1
pattern2
pattern3
<new line>
pattern1...
Ich konnte dies erreichen, indem ich den ersten Befehl in eine andere awk-Anweisung leitete
awk -F '\n' '/pattern1|pattern2|pattern3/ { print; }' infile | awk '{ if ((NR % 3) == 1) printf("\n"); print; }'
Ich denke, dass es einen effizienteren Weg geben muss, also begann ich zu suchen, wie ich die beiden Befehle miteinander kombinieren könnte. Ich habe folgendes versucht:
awk '/pattern1|pattern2|pattern3/ { if ((NR % 3) ==1 ) printf("\n"); print; }'
Ich dachte, das würde funktionieren, aber die Ausgabe ist völlig unvorhersehbar. Manchmal sind 5 Zeilen gruppiert, Gruppen von 2 Zeilen, aber keine Zeilen von 3.
Ich dachte, dass es vielleicht ein Trennzeichenproblem gibt, also habe ich versucht, mit der Option -F zu spielen und das IFS einzustellen, aber weder die Ausgabe geändert.
Ich glaube, ich mache etwas Dummes in der Art, wie ich versucht habe, die Musterübereinstimmung mit der if-Anweisung zu kombinieren, aber ich konnte die Kombination nicht herausfinden.
Ist das, was ich versuche, in einem einzigen awk-Befehl möglich? Und wenn ja, wo mache ich etwas falsch?