Gawk: backspace que antecede uma nova linha não funciona

1

Estou usando o gawk (4.1.3) e parece que descobri um problema trivial. O caractere de retrocesso parece não funcionar se for imediatamente seguido por uma nova linha.

awk 'BEGIN{for(i=1;i<=3;i++) printf("%d,",i); printf("\b\n")}'

me dá 1,2,3, (a última vírgula não foi embora)

Isso não é resolvido mesmo se eu colocar o \n em uma nova função printf .

No entanto, se eu inserir qualquer caractere entre \b e \n (por exemplo, um espaço), isso funcionará.

Se eu remover \n , isso funciona novamente.

Qual é esse problema?

    
por WYSIWYG 26.06.2018 / 16:42

1 resposta

2

\b apenas move o cursor, não sobrescreve o texto.

Para escrever uma lista separada por vírgula em awk , uma opção é criar um registro adequado e imprimi-lo:

BEGIN {
    OFS = ","
    $0 = ""

    for (i = 1; i <= 3; ++i)
      $i = i

    print
}

A saída seria 1,2,3 .

E para a multidão de uma linha:

awk -vOFS=',' 'BEGIN { for (i = 1; i <= 3; ++i) $i = i; print }'

A definição de $0 para uma string vazia não é realmente necessária, pois só temos um bloco BEGIN e nenhum dado de entrada, então eu deixei de fora da variação de uma linha. / p>     

por 26.06.2018 / 16:51