In an old paper "Awk - A Pattern Scanning and Processing Language"[*]
from the authors of Awk I read:
"Awk also provides the arithmetic functions sqrt, log, exp, and
int, for square root, base e logarithm, exponential, and integer
part of their respective arguments.
The name of one of these built-in functions, _without argument or
parentheses_, stands for the value of the function on the whole
record."
POSIX[**] says:
"Although the grammar (see Grammar) permits built-in functions to
appear _with no arguments or parentheses_, [...], such use is
undefined."
(_emphasis_ in the quotes added by me).
GNU Awk (for example) typically[***] returns errors:
$ awk '{print sqrt}'
awk: cmd. line:1: {print sqrt}
awk: cmd. line:1: ^ syntax error
$ awk '{print sqrt()}'
awk: cmd. line:1: {print sqrt()}
awk: cmd. line:1: ^ 0 is invalid as number of arguments for sqrt
How do other Awks behave? - I'd assume that "oawk" and "nawk" might
support that feature, but does any other awk implementation support
that?
Janis
[*] https://people.eecs.berkeley.edu/~clancy/sp.unix.stuff/awk
[**] https://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.html [***] With length($0), length(), length as a singular(?) exception.
On 2023-05-11, Janis Papanagnou wrote:
GNU Awk (for example) typically[***] returns errors:
$ awk '{print sqrt}'
awk: cmd. line:1: {print sqrt}
awk: cmd. line:1: ^ syntax error
$ awk '{print sqrt()}'
awk: cmd. line:1: {print sqrt()}
awk: cmd. line:1: ^ 0 is invalid as number of arguments for sqrt
How do other Awks behave? - I'd assume that "oawk" and "nawk" might
support that feature, but does any other awk implementation support
that?
[*] https://people.eecs.berkeley.edu/~clancy/sp.unix.stuff/awk--
[**] https://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.html [***] With length($0), length(), length as a singular(?) exception.
On 2023-05-11, Janis Papanagnou wrote:
GNU Awk (for example) typically[***] returns errors:
$ awk '{print sqrt}'
awk: cmd. line:1: {print sqrt}
awk: cmd. line:1: ^ syntax error
$ awk '{print sqrt()}'
awk: cmd. line:1: {print sqrt()}
awk: cmd. line:1: ^ 0 is invalid as number of arguments for sqrt
How do other Awks behave? - I'd assume that "oawk" and "nawk" might support that feature, but does any other awk implementation support
that?
The one included in BusyBox 1.35.0 doesn't seem to accept it:
$ busybox awk '1 { print sqrt }'
awk: cmd. line:1: Unexpected token
$
The one from NetBSD, http://man.netbsd.org/awk.1 , does:
$ printf 2\\n | awk '1 { print sqrt }'
1.41421
$
Ivan Shmakov <ivan@siamics.netNOSPAM.invalid> writes:
On 2023-05-11, Janis Papanagnou wrote:
GNU Awk (for example) typically[***] returns errors:
$ awk '{print sqrt}'
awk: cmd. line:1: {print sqrt}
awk: cmd. line:1: ^ syntax error
$ awk '{print sqrt()}'
awk: cmd. line:1: {print sqrt()}
awk: cmd. line:1: ^ 0 is invalid as number of arguments for sqrt
How do other Awks behave? - I'd assume that "oawk" and "nawk" might
support that feature, but does any other awk implementation support
that?
The one included in BusyBox 1.35.0 doesn't seem to accept it:
$ busybox awk '1 { print sqrt }'
awk: cmd. line:1: Unexpected token
$
The one from NetBSD, http://man.netbsd.org/awk.1 , does:
$ printf 2\\n | awk '1 { print sqrt }'
1.41421
$
As does a version of Unix V7 awk running on a PDP11 simulator. It's obviously an old feature:
$ echo 2 | awk '{print sqrt}'
1.41421
Curiously, it's only documented to apply to the length function. man
awk says
The built-in function length returns the length of its argu-
ment taken as a string, or of the whole line if no argument.
There are also built-in functions exp, log, sqrt, and int.
Ben Bacarisse <ben.usenet@bsb.me.uk> writes:
Ivan Shmakov <ivan@siamics.netNOSPAM.invalid> writes:
On 2023-05-11, Janis Papanagnou wrote:
GNU Awk (for example) typically[***] returns errors:
$ awk '{print sqrt}'
awk: cmd. line:1: {print sqrt}
awk: cmd. line:1: ^ syntax error
$ awk '{print sqrt()}'
awk: cmd. line:1: {print sqrt()}
awk: cmd. line:1: ^ 0 is invalid as number of arguments for sqrt
How do other Awks behave? - I'd assume that "oawk" and "nawk" might
support that feature, but does any other awk implementation support
that?
The one included in BusyBox 1.35.0 doesn't seem to accept it:
$ busybox awk '1 { print sqrt }'
awk: cmd. line:1: Unexpected token
$
The one from NetBSD, http://man.netbsd.org/awk.1 , does:
$ printf 2\\n | awk '1 { print sqrt }'
1.41421
$
As does a version of Unix V7 awk running on a PDP11 simulator. It's
obviously an old feature:
$ echo 2 | awk '{print sqrt}'
1.41421
Curiously, it's only documented to apply to the length function. man
awk says
The built-in function length returns the length of its argu-
ment taken as a string, or of the whole line if no argument.
There are also built-in functions exp, log, sqrt, and int.
Just from that description, it's not clear that `length()` and `length`
are both valid.
Sysop: | DaiTengu |
---|---|
Location: | Appleton, WI |
Users: | 920 |
Nodes: | 10 (1 / 9) |
Uptime: | 90:12:59 |
Calls: | 12,188 |
Files: | 186,527 |
Messages: | 2,237,211 |