awk ändern Sie die record-separator (RS), um alle 2 Zeilen
Frage ich mich, wie Awk verwenden, um Prozess alle 2 Zeilen von Daten statt von jedem eins. Standardmäßig ist die record-separator (RS) festgelegt ist, um jede neue Zeile, wie kann ich das ändern, um alle 2 Zeilen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es hängt davon ab, was du erreichen willst, aber eine Möglichkeit ist die Verwendung der
getline
Unterricht. Für jede Zeile, Lesen Sie nächste und speichern es in eine variable. So haben Sie erste Zeile in$0
und das zweite ineven_line
:Divide&Conquer: tun Sie das in zwei Schritten:
trennen Sie die einzelnen zwei-line-Rekord:
NR%2==0 {print ""}
set record separator zu leeren Zeile:
BEGIN {RS=""}
Vorteil: In der zweiten
awk
zu verarbeiten, müssen Sie alle Felder der beiden Linien zu erreichen, denn$1 to $NF
.Beachten:
$1=$1
wird hier verwendet, um durchzusetzen, ein update auf$0
(die ganze Platte).Dies garantiert, dass die Ausgabe druckt die zwei-line-Datensatz auf einer Zeile.
Sobald Sie ändern Sie ein Feld in Ihrem Programm, wenn Sie die beiden-line records dies ist nicht mehr erforderlich.
Wenn Sie möchten, zu verschmelzen, Linien, verwenden Sie die
einfügen
utility:Dies ist ein bisschen hackish, aber es ist eine wörtliche Antwort zu deiner Frage:
Set the record separator, um eine regex-das entspricht zwei Zeilen. Dann für jede Zeile gesetzt
$0
auf der Datensatz-Abschlusszeichen (was matched die regex inRS
). Dieses Feld führt die Teilung aufFS
. Die print-Anweisung ist nur eine demonstration statt-Halter.Beachten Sie, dass
$0
enthält zwei Zeilenumbrüche, aber die Felder enthalten keine Zeilenumbrüche.