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?

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top