RHEL 5.8 上的 awk 中缺少 float 函数

RHEL 5.8 上的 awk 中缺少 float 函数

为什么我的 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 123floatanything123

你写过吗

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

你会看到

x123<->Foampile

我不认为有任何 awk 实现具有该float功能。

您希望该功能做什么?

另一方面,像 Solaris 这样的现代 POSIX awks/usr/xpg4/bin/awknawkgawk确实支持用户函数,因此在这些函数中,除非您定义floatanything函数,否则您将看到该错误。

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}

相关内容