getline
in der nächsten Zeile liest und erhöht die NR
Zähler um 1 Nach der Verwendung von getline
, awk
Lebensläufe mit der nächsten Zeile zu arbeiten. Dies ist in den meisten Fällen das gewünschte Verhalten.Peek bei der nächsten Zeile, aber nicht verbraucht es
In meiner speziellen Situation brauche ich nur die nächste Zeile zu sehen und je nach Inhalt lese ich die nächste Zeile oder ich muss eine Zeile zurückverfolgen.
Wie kann ich eine Zeile in awk
zurückverfolgen? Ich habe versucht, die NR
Zähler manuell auf setzen, aber das funktioniert nicht. Oder gibt es eine Methode, die nur auf die nächste Zeile schaut, ohne NR
zu ändern?
Ich brauche ein Lookahead von einer Zeile. Einfach die Zeile in einer Variablen zu speichern und später darauf zu verweisen, funktioniert in diesem Fall nicht. Ich versuche, ein literarisches Programmiertool in awk
zu implementieren, wo eine Hauptdatei viele Unterdateien enthalten kann. Eine solche Subdatei beginnt mit einer Zeile wie "% file:file1"
. Das Ende einer solchen Datei ist erreicht, wenn eine Zeile mit einer tieferen Einrückung oder eine andere Zeile mit einer Zeile wie "% file:file2"
erreicht wird.
Die Regel für alle Zeilen passend /% file:/
wird nicht verwendet, wenn ich diese Zeile bereits mit getline gelesen habe. Deshalb würde ich gerne NR
auf die vorherige Zeile zurücksetzen, dann würde awk
die Zeile wieder lesen, die /% file:/
entspricht, und die entsprechende Regel würde ausgeführt werden.
Ich entwickelte eine Text-Munge-Sprache namens TXR, die Mustererkennung mit implizitem Backtracking sowohl in zeilenorientierten ("vertikalen") als auch zeichenorientierten ("horizontalen") Anpassungsmodi bietet. Die Lookahead-Tiefe ist eine beliebige Anzahl von Zeichen oder Zeilen. TXR ist nahezu ideal für die Verarbeitung einer Programmiersprache. Es ist schwer, ein direkt relevantes Beispiel zu geben; Können Sie eine vollständige Spezifikation der Notation schreiben? – Kaz