Node:Numeric Array Subscripts, Next:Uninitialized Subscripts, Previous:Delete, Up:Arrays
An important aspect about arrays to remember is that array subscripts
are always strings. When a numeric value is used as a subscript,
it is converted to a string value before being used for subscripting
(see Conversion of Strings and Numbers).
This means that the value of the built-in variable
affect how your program accesses elements of an array. For example:
xyz = 12.153 data[xyz] = 1 CONVFMT = "%2.2f" if (xyz in data) printf "%s is in data\n", xyz else printf "%s is not in data\n", xyz
12.15 is not in data. The first statement gives
xyz a numeric value. Assigning to
data with the string value
(using the default conversion value of
Thus, the array element
data["12.153"] is assigned the value one.
The program then changes
the value of
CONVFMT. The test
(xyz in data) generates a new
string value from
"12.15"--because the value of
CONVFMT only allows two significant digits. This test fails,
"12.15" is a different string from
According to the rules for conversions
(see Conversion of Strings and Numbers), integer
values are always converted to strings as integers, no matter what the
CONVFMT may happen to be. So the usual case of
the following works:
for (i = 1; i <= maxsub; i++) do something with array[i]
The "integer values always convert to strings as integers" rule
has an additional consequence for array indexing.
Octal and hexadecimal constants
(see Octal and Hexadecimal Numbers)
are converted internally into numbers, and their original form
This means, for example, that
all refer to the same element!
As with many things in
awk, the majority of the time
things work as one would expect them to. But it is useful to have a precise
knowledge of the actual rules which sometimes can have a subtle
effect on your programs.