Wie weist man awk an, ein #
Zeichen in einer Zeile als Datensatztrennzeichen zu verwenden? Das Problem ist, dass Sie nicht sagen können, RS="^#$"
weil es ^
mit dem Anfang der Datei und nicht mit dem Anfang einer Zeile RS="#\n"
übereinstimmt und auch nicht funktioniert, weil es mit #
Zeichen übereinstimmt , die nicht am Anfang einer Zeile stehen.
$ data='#
first record, first field
first record, second field
#
second record, first field#
second record, second field
'
Drucken Sie dann das erste Feld jedes Datensatzes mit RS="#\n"
:
$ printf "%s" "$data" | awk '
BEGIN { RS="#\n"; FS="\n" }
/./ {print $1}
'
first record, first field
second record, first field
second record, second field
Die letzte Zeile ist falsch, weil es nicht das erste Feld ist, sondern das zweite. Die beabsichtigte Ausgabe war
first record, first field
second record, first field#
line one#line two#line three
?RS="#"
was?#\nrecord one\n#\nrecord two
und jeder Datensatz besteht aus mehreren\n
getrennten Feldern.RS='#\n'
sollte afaik funktionieren - obwohl es die Initiale#
so behandelt, als würde ein leerer Datensatz beendet (dh alleNR
Werte werden um eins "aus" sein)Antworten:
Hier ist eine Möglichkeit, dies zu tun
awk
:Der Trick besteht darin, das Datensatztrennzeichen entweder auf den Anfang der Datei (
^
) oder auf eine neue Zeile zu setzen, gefolgt von einer#
und einer weiteren neuen Zeile\n
.quelle
/./
mitNR==1
). Ich denke, die einfachste Lösung wäre, die Datei / Daten mit einem#
in einer separaten Zeile zu beenden - anstatt zu beginnen . Dann\n#\n
könnte als RS verwendet werden und es würde richtig funktionieren.NR==1
und funktionieren daher nicht, wenn weiter unten mehr Leerzeilen vorhanden sind.