Falta a função de flutuação no awk no RHEL 5.8

1

Por que float está faltando em awk no meu RHEL 5.8? Foi substituído por alguma outra função?

No Solaris:

echo "Foampile=123" | awk -F"=" '{ print float($2) "<->" $1 }'

retorna

123<->Foampile

no RHEL 5.8

awk: (FILENAME=- FNR=1) fatal: function 'float' not defined
    
por amphibient 26.11.2012 / 21:15

2 respostas

2

O Solaris /usr/bin/awk é um awk muito antigo que não suporta funções do usuário. Então, nesse awk, float(123) é o mesmo que anything(123) ou anything 123 , que é a concatenação do valor da variável float ou anything (vazia se não definida) e 123 . Então, não é um erro, mas não faz nada.

Você escreveu

echo "Foampile=123" | awk -F '=' '{float="x"; print float($2) "<->" $1}'

você teria visto

x123<->Foampile

Não creio que exista qualquer implementação do awk que tenha uma função float .

O que você esperaria que essa função fizesse de qualquer maneira?

Por outro lado, os dispositivos POSIX modernos, como o Solaris /usr/xpg4/bin/awk ou nawk ou gawk , suportam as funções do usuário, portanto, a menos que você defina a função float ou anything , você verá esse erro.

echo "Foampile=123" | awk -F '=' '{ print $2 "<->" $1 }'

funcionaria exatamente da mesma forma (e funcionaria com os awks modernos).

Nos awks modernos, para diferenciar entre uma chamada de função e a concatenação de uma variável e algo dentro de chave, você precisa adicionar pelo menos um espaço extra:

$ echo x | awk '{print foo ($1)}'
x
$ echo x | awk 'function foo(x) {return "y"}; {print foo($1)}'
y
    
por 26.11.2012 / 21:56
0

Eu acho que é uma função específica do Solaris. Pode ser necessário usar printf ou sprintf e especificar o float.

awk 'BEGIN {printf "%1##f\n", "<->" $1}

    
por 26.11.2012 / 22:00

Tags