파일에서 이전 레코드의 마지막 문자를 기준으로 레코드를 삭제하는 방법

파일에서 이전 레코드의 마지막 문자를 기준으로 레코드를 삭제하는 방법

이전 레코드의 마지막 문자와 현재 레코드의 첫 번째 문자를 기준으로 현재 레코드를 삭제하려면 어떻게 해야 합니까?

예:

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

요구 사항은 이전 레코드가 큰따옴표로 끝나고 현재 레코드가 큰따옴표로 시작하지 않는 레코드를 삭제하는 것입니다. 위의 예에서 네 번째 레코드는 출력에서 ​​제거되어야 합니다.

답변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"

관련 정보