gawk
Gawk에서 버그를 발견한 것인지, 아니면 페이지 의 내용을 잘못 읽었거나 놓친 것인지 잘 모르겠습니다 man
.
gawk
페이지 에 따르면 man
호환 모드에서는 RS
두 개 이상의 문자가 포함된 경우 첫 번째 문자만 입력 레코드 구분 기호로 간주됩니다.
기록
일반적으로 레코드는 줄바꿈으로 구분됩니다. 내장 변수에 값을 할당하여 레코드가 분리되는 방식을 제어할 수 있습니다.RS
. 만약에RS
레코드를 구분하는 단일 문자입니다. 그렇지 않으면,RS
정규식입니다. 이 정규식과 일치하는 입력의 텍스트로 구분된 레코드입니다. 그러나 호환 모드에서는 문자열 값의 첫 번째 문자만 사용하여 레코드를 구분합니다. 만약에RS
빈 문자열로 설정하면 레코드가 빈 줄로 구분됩니다. 언제RS
빈 문자열로 설정하면 줄 바꿈은 항상 값 외에 필드 구분 기호 역할을 합니다.FS
이있을 수 있습니다.
따라서 런타임 시 gawk -P -- '1' RS="bar" <<<'foobarfoo'
다음과 같은 결과가 나올 것으로 예상됩니다(모든 페이지 -P
에는 호환 모드가 켜져 있습니다).gawk
man
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
질문에 설명된 대로, 즉 문서와 다르게 처리됩니다.