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