awk에서 ^#$를 레코드 구분 기호로 사용하는 방법은 무엇입니까?

awk에서 ^#$를 레코드 구분 기호로 사용하는 방법은 무엇입니까?

#문자 자체를 한 줄의 레코드 구분 기호로 사용하도록 awk에게 어떻게 알릴 수 있나요 ? 문제는 줄의 시작이 아닌 파일의 시작과 일치하기 RS="^#$"때문에 그렇게 말할 수 없고, 줄의 시작 부분에 없는 문자 와 일치하기 때문에 작동하지 않는다는 것입니다.^RS="#\n"#

$ data='#
first record, first field
first record, second field
#
second record, first field#
second record, second field
'

그런 다음 다음 명령을 사용하여 각 레코드의 첫 번째 필드를 인쇄합니다 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

마지막 줄은 첫 번째 필드가 아니고 두 번째 필드이므로 잘못된 것입니다. 예상 출력은 다음과 같습니다.

first record, first field
second record, first field#

답변1

이를 수행하는 한 가지 방법은 다음과 같습니다 awk.

$ printf "%s\n" "$data" | 
    awk -F'\n' -v RS='(^|\n)#\n' '/./ {print $1}' 
first record, first field
second record, first field#

비결은 레코드 구분 기호를 다음으로 설정하는 것입니다.누구나파일의 시작( ^) 또는 개행 문자 다음에 #또 다른 개행 문자 가 옵니다 \n.


관련 정보