Por que o Gawk no modo de compatibilidade divide os registros da mesma maneira que quando as extensões do GNU são ativadas?

4

Não tenho certeza se encontrei um bug no Gawk ou se estou interpretando mal / algo faltando na gawk ' man page.

De acordo com a página gawk de man , quando no modo de compatibilidade, se RS contiver vários caracteres, apenas o primeiro caractere será tratado como o separador de registro de entrada:

Records
Normally, records are separated by newline characters. You can control how records are separated by assigning values to the built-in variable RS. If RS is any single character, that character separates records. Otherwise, RS is a regular expression. Text in the input that matches this regular expression separates the record. However, in compatibility mode, only the first character of its string value is used for separating records. If RS is set to the null string, then records are separated by blank lines. When RS is set to the null string, the newline character always acts as a field separator, in addition to whatever value FS may have.

Portanto, ao executar gawk -P -- '1' RS="bar" <<<'foobarfoo' , esperaria o seguinte resultado (observe que -P ativa o modo de compatibilidade, por gawk ' man page):

foo
arfoo

No entanto, se eu executar:

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

E o mesmo acontece mesmo quando se ativa explicitamente o modo de compatibilidade:

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

Então, aparentemente, quando no modo de compatibilidade, o Gawk realmente divide os registros da mesma maneira que quando as extensões do GNU são ativadas. O que estou perdendo?

Isso está no Linux (Ubuntu 16.04 64 bits, versão Gawk: GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0) ).

    
por kos 24.04.2016 / 15:36

1 resposta

3

Como a documentação é bastante explícita, eu simplesmente arquivaria um relatório de erros.

Comparando com o BWK ( one-true-awk ou original-awk ), ele se comporta como a documentação sugere. Se o desenvolvedor do gawk tivesse alguma outra implementação de referência em mente para esse detalhe, ele deveria ser documentado.

Testando o -c (modo de compatibilidade) do gawk, ele trata RS como descrito na pergunta, ou seja, diferente da documentação.

    
por 24.04.2016 / 15:59

Tags