Ich frage mich, wie Awk verwenden, um alle 2 Zeilen von Daten statt jeder einzelnen zu verarbeiten. Standardmäßig wird das Record-Trennzeichen (RS) auf jede neue Zeile gesetzt, wie kann ich dies auf alle 2 Zeilen ändern.awk zum Ändern der Datensatztrennzeichen (RS) auf alle 2 Zeilen
Antwort
Dividieren & Conquer: tut es in zwei Schritten:
- Verwendung awk jedes Zweilinienaufzeichnungsleerzeile
zu trennen einzuführen: zu einem anderen awk ProzessNR%2==0 {print ""}
- Rohr und Platten
set Trennzeichen zur Leerzeile:BEGIN {RS=""}
Vorteil: In der zweiten awk
Prozess Sie haben alle Felder der beiden Zeilen als $1 to $NF
zugänglich.
awk '{print}; NR%2==0 {print ""}' data | \
awk 'BEGIN {RS=""}; {$1=$1;print}'
Hinweis:
$1=$1
hier verwendet wird, ein Update auf $0
(die gesamten Datensatz) zu erzwingen.
Dies garantiert, dass der Ausdruck den zweizeiligen Datensatz in einer Zeile ausgibt.
Sobald Sie ein Feld in Ihrem Programm ändern, wenn Sie die zweizeiligen Datensätze verarbeiten, ist dies nicht mehr erforderlich.
Es hängt davon ab, was Sie erreichen möchten, aber eine Möglichkeit besteht darin, die getline
Anweisung zu verwenden. Lesen Sie für jede Zeile das nächste und speichern Sie es in einer Variablen. So werden Sie erste Zeile haben in $0
und zweite in even_line
:
getline even_line
Wenn Sie Linien zusammenführen möchten, verwenden Sie das paste
Dienstprogramm:
$ printf "%s\n" one two three four five
one
two
three
four
five
$ printf "%s\n" one two three four five | paste -d " " - -
one two
three four
five
Dieses etwas hackish ist, aber es ist eine wörtliche Antwort auf Ihre Frage:
awk 'BEGIN {RS = "[^\n]*\n[^\n]*\n"} {$0 = RT; print $1, $NF}' inputfile
Setzen Sie das Datensatztrennzeichen auf eine Regex, die zwei Zeilen entspricht. Setzen Sie dann für jede Zeile $0
auf den Record-Terminator (was der Regex in RS
entspricht). Dies führt eine Feldaufteilung unter FS
durch. Die Print-Anweisung ist nur ein Demonstrations-Platzhalter.
Beachten Sie, dass $0
zwei Zeilenumbrüche enthält, die Felder jedoch keine Zeilenumbrüche enthalten.
- 1. Datensatztrennzeichen in einem Datensatztrennzeichen
- 2. Hinzufügen zusätzlicher Zeilen zum Dokument mit awk
- 3. AWK - Zeilen in der Schleife drucken?
- 4. Drucken Zeilen Nummer 2, 4, 8, 16 ... mit awk
- 5. Awk die leeren Zeilen
- 6. Alle Zeilen außer 2 Spalten auswählen
- 7. Ausführen einer Awk durch Aufteilen der Zeilen
- 8. Awk zum Drucken von übereinstimmenden Zeilen aus zwei unsortierten Dateien
- 9. awk Druck Spalte Daten in Zeilen basierend auf übereinstimmenden Schlüssel
- 10. Tableview alle Zeilen ändern, wenn ich versuche
- 11. awk 2 perl conversion
- 12. UPDATE alle Zeilen nach der 2. Reihe, von 1 auf diese Zeilen ADDING
- 13. awk Lösung zum Vergleichen der aktuellen Zeile mit der nächsten Zeile und Drucken einer der Zeilen basierend auf einer Bedingung
- 14. AWK-Befehl zum Drucken bis zum Ende der Zeile
- 15. AWK-Befehl zum Drucken bis zum Ende der Zeile
- 16. dupliziertes Feld mit awk ändern
- 17. Force UILabel zum Anzeigen von 2 Zeilen
- 18. Summenspalten basierend auf 2 verschiedenen Feldern mit Hilfe von awk
- 19. Alle Zeilen markieren und alle Zeilen in der Listenansicht abwählen
- 20. awk Farbcode zum Text hinzufügen
- 21. Awk umgekehrt beide Zeilen und Wörter
- 22. Filtern von Zeilen basierend auf der Anzahl der Spalten mit AWK
- 23. berechnen Unterschied zwischen 2 Zeilen
- 24. AWK zum Filtern von CSV-Dateien
- 25. awk zum Drucken Teil eines Arrays in der Shell
- 26. Inhalt der Zeilen in Datei mit sed, awk etc
- 27. GROUPBY - Wie Ergebnis der Logikprüfung auf alle Zeilen anwenden
- 28. Durchschnitt der Spalte nach Stunden (Zeilen) mit awk
- 29. Bash $ {..//../ ..} nicht alle Vorkommen ändern
- 30. mit awk Skript zum Drucken der letzten n Zeilen einer Textdatei