
Wie löschen wir den aktuellen Datensatz basierend auf dem letzten Zeichen des vorherigen Datensatzes und dem ersten Zeichen des aktuellen Datensatzes?
Beispiel:
abcd|efg
"xyz"|"ghi"
"lmn"|"qrs"
123|abc
Voraussetzung ist, dass ein Datensatz gelöscht wird, dessen vorheriger Datensatz mit doppelten Anführungszeichen endet und dessen aktueller Datensatz nicht mit doppelten Anführungszeichen beginnt. Im obigen Beispiel soll der 4. Datensatz aus der Ausgabe gelöscht werden.
Antwort1
$ awk '(prev !~ /"$/) || ($1 ~ /^"/){print} {prev=$1}' file
abcd|efg
"xyz"|"ghi"
"lmn"|"qrs"
oder wenn Sie eines davon bevorzugen:
$ awk '!( (prev ~ /"$/) && ($1 !~ /^"/) ){print} {prev=$1}' file
abcd|efg
"xyz"|"ghi"
"lmn"|"qrs"
$ awk '{f=((prev ~ /"$/) && ($1 !~ /^"/)); prev=$1} !f' file
abcd|efg
"xyz"|"ghi"
"lmn"|"qrs"