So löschen Sie den Datensatz basierend auf dem letzten Zeichen des vorherigen Datensatzes in einer Datei

So löschen Sie den Datensatz basierend auf dem letzten Zeichen des vorherigen Datensatzes in einer Datei

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"

verwandte Informationen