为什么我的 RHEL 5.8 中float
缺少该内容?awk
是不是被其他函数替代了?
在 Solaris 上:
echo "Foampile=123" | awk -F"=" '{ print float($2) "<->" $1 }'
回报
123<->Foampile
在 RHEL 5.8 上
awk: (FILENAME=- FNR=1) fatal: function `float' not defined
答案1
Solaris/usr/bin/awk
是一个非常古老的 awk,不支持用户函数。因此,在该 awk 中,与orfloat(123)
相同,即or变量的值(如果未设置则为空)和 的串联。所以,这不是一个错误,但它什么也没做。anything(123)
anything 123
float
anything
123
你写过吗
echo "Foampile=123" | awk -F '=' '{float="x"; print float($2) "<->" $1}'
你会看到
x123<->Foampile
我不认为有任何 awk 实现具有该float
功能。
您希望该功能做什么?
另一方面,像 Solaris 这样的现代 POSIX awks/usr/xpg4/bin/awk
或nawk
或gawk
确实支持用户函数,因此在这些函数中,除非您定义float
或anything
函数,否则您将看到该错误。
echo "Foampile=123" | awk -F '=' '{ print $2 "<->" $1 }'
工作原理完全相同(并且可以与现代 awks 一起工作)。
在现代 awks 中,为了消除函数调用和变量与大括号内的内容的串联之间的歧义,您需要添加至少一个额外的空格:
$ echo x | awk '{print foo ($1)}'
x
$ echo x | awk 'function foo(x) {return "y"}; {print foo($1)}'
y
答案2
我认为这是 Solaris 特有的功能。您可能需要改用 printf 或 sprintf 并指定浮点数。
awk 'BEGIN {printf "%1##f\n", "<->" $1}