Hinzufügen eines Trennzeichen nach jeder Datei innerhalb awk verarbeitet
Frage
Ich habe mehrere Dateien, in denen ich Text zwischen zwei Begrenzungszeichen am Extrahieren (START und END nicht inklusive). Nachdem ich jede Datei, die ich ausgeben sagt ein Begrenzer will verarbeiten, welche die Datei verarbeitet wurde, die Zeichenfolge „END“. Wie würde ich die Zeichenfolge „END“ auf den Ausgang nach jeder bearbeiteten Datei hinzufügen? Zum Beispiel:
sagen, ich habe zwei Dateien mit dem Inhalt
file1.txt
line 1
line 2
START
I want to extract this text
and this text
END
line 3
line 4
und
file2.txt
line10
line20
START
I also want this text.
END
line 30
Ich weiß, wenn ich folgende ausführen:
awk '/START/,/END/{if (!/START/&&!/END/) print}' test*.txt
Ich werde die folgende Ausgabe:
I want to extract this text
and this text
I also want this text.
Aber der Ausgang ich will, ist:
I want to extract this text
and this text
END
I also want this text.
END
Wie erhalte ich die Zeichenfolge „END“ hinzugefügt, um die Ausgabe nach jeder Datei verarbeitet wird?
Lösung
FNR==1 && NR!=1 {print "END"}
END {print "END"}
So you'd have:
awk 'FNR==1 && NR!=1 {print "END"} /START/,/END/{if (!/START/&&!/END/) print} END {print "END"}' test*.txt
Andere Tipps
the variable FNR is reset to 0 on every new file, so you could have a rule trigger on (FNR==0 && NR!=0):
(FNR==0) && (NR!=0) {
print "END"
}
END {
print "END"
}
You're asking awk to skip printing END. Stop that.
awk '/START/,/END/{if (!/START/) print}' test*.txt