Node:Nondecimal Data, Next:Two-way I/O, Previous:Advanced Features, Up:Advanced Features
If you run gawk
with the --non-decimal-data
option,
you can have nondecimal constants in your input data:
$ echo 0123 123 0x123 | > gawk --non-decimal-data '{ printf "%d, %d, %d\n", > $1, $2, $3 }' -| 83, 123, 291
For this feature to work, write your program so that
gawk
treats your data as numeric:
$ echo 0123 123 0x123 | gawk '{ print $1, $2, $3 }' -| 0123 123 0x123
The print
statement treats its expressions as strings.
Although the fields can act as numbers when necessary,
they are still strings, so print
does not try to treat them
numerically. You may need to add zero to a field to force it to
be treated as a number. For example:
$ echo 0123 123 0x123 | gawk --non-decimal-data ' > { print $1, $2, $3 > print $1 + 0, $2 + 0, $3 + 0 }' -| 0123 123 0x123 -| 83 123 291
Because it is common to have decimal data with leading zeros, and because using it could lead to surprising results, the default is to leave this facility disabled. If you want it, you must explicitly request it.
Caution:
Use of this option is not recommended.
It can break old programs very badly.
Instead, use the strtonum
function to convert your data
(see Octal and Hexadecimal Numbers).
This makes your programs easier to write and easier to read, and
leads to less surprising results.