ファイルから前のレコードの最後の文字に基づいてレコードを削除する方法

ファイルから前のレコードの最後の文字に基づいてレコードを削除する方法

前のレコードの最後の文字と現在のレコードの最初の文字に基づいて現在のレコードを削除するにはどうすればよいですか?

例:

abcd|efg
"xyz"|"ghi"
"lmn"|"qrs"
123|abc

要件は、前のレコードが二重引用符で終わり、現在のレコードが二重引用符で始まらないレコードを削除することです。上記の例では、4番目のレコードは出力から削除する必要があります。

ベストアンサー1

$ awk '(prev !~ /"$/) || ($1 ~ /^"/){print} {prev=$1}' file
abcd|efg
"xyz"|"ghi"
"lmn"|"qrs"

または、次のいずれかを好む場合:

$ 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"

おすすめ記事