Gawk 분할 기록이 GNU 확장이 활성화된 경우와 호환 모드에서 동일한 방식으로 기록되는 이유는 무엇입니까?

Gawk 분할 기록이 GNU 확장이 활성화된 경우와 호환 모드에서 동일한 방식으로 기록되는 이유는 무엇입니까?

gawkGawk에서 버그를 발견한 것인지, 아니면 페이지 의 내용을 잘못 읽었거나 놓친 것인지 잘 모르겠습니다 man.

gawk페이지 에 따르면 man호환 모드에서는 RS두 개 이상의 문자가 포함된 경우 첫 번째 문자만 입력 레코드 구분 기호로 간주됩니다.

기록
일반적으로 레코드는 줄바꿈으로 구분됩니다. 내장 변수에 값을 할당하여 레코드가 분리되는 방식을 제어할 수 있습니다. RS. 만약에RS레코드를 구분하는 단일 문자입니다. 그렇지 않으면,RS정규식입니다. 이 정규식과 일치하는 입력의 텍스트로 구분된 레코드입니다. 그러나 호환 모드에서는 문자열 값의 첫 번째 문자만 사용하여 레코드를 구분합니다. 만약에RS빈 문자열로 설정하면 레코드가 빈 줄로 구분됩니다. 언제RS빈 문자열로 설정하면 줄 바꿈은 항상 값 외에 필드 구분 기호 역할을 합니다.FS이있을 수 있습니다.

따라서 런타임 시 gawk -P -- '1' RS="bar" <<<'foobarfoo'다음과 같은 결과가 나올 것으로 예상됩니다(모든 페이지 -P에는 호환 모드가 켜져 있습니다).gawkman

foo
arfoo

그러나 실행하면 다음과 같습니다.

% gawk -P -- '1' RS="bar" <<<'foobarfoo' 
foo
foo

호환 모드가 명시적으로 켜져 있어도 동일한 일이 발생합니다.

% gawk -c '1' RS="bar" <<<'foobarfoo'
foo
foo

분명히 호환 모드에서 Gawk는 실제로 GNU 확장이 활성화되었을 때와 동일한 방식으로 레코드를 분할합니다. 내가 무엇을 놓치고 있나요?

이는 Linux(Ubuntu 16.04 64비트, Gawk 버전: )에 있습니다 GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0).

답변1

문서가 매우 명확하므로 버그 보고서를 제출하면 됩니다.

BWK(진짜 이상한또는원래의 awk), 문서에서 제안하는 대로 작동합니다. gawk 개발자가 이 세부 사항에 대한 다른 참조 구현을 가지고 있는 경우 이를 문서화해야 합니다.

멍청한 테스트-c(호환성 모드), 이는 RS질문에 설명된 대로, 즉 문서와 다르게 처리됩니다.

관련 정보