Go forward to Delete.
Go backward to Array Example.
Go up to Arrays.

Scanning all Elements of an Array
=================================

   In programs that use arrays, often you need a loop that executes
once for each element of an array.  In other languages, where arrays are
contiguous and indices are limited to positive integers, this is easy:
the largest index is one less than the length of the array, and you can
find all the valid indices by counting from zero up to that value.  This
technique won't do the job in `awk', since any number or string may be
an array index.  So `awk' has a special kind of `for' statement for
scanning an array:

     for (VAR in ARRAY)
       BODY

This loop executes BODY once for each different value that your program
has previously used as an index in ARRAY, with the variable VAR set to
that index.

   Here is a program that uses this form of the `for' statement.  The
first rule scans the input records and notes which words appear (at
least once) in the input, by storing a 1 into the array `used' with the
word as index.  The second rule scans the elements of `used' to find
all the distinct words that appear in the input.  It prints each word
that is more than 10 characters long, and also prints the number of
such words.  See Built-in Functions: Built-in, for more information
on the built-in function `length'.

     # Record a 1 for each word that is used at least once.
     {
       for (i = 1; i <= NF; i++)
         used[$i] = 1
     }
     
     # Find number of distinct words more than 10 characters long.
     END {
       for (x in used)
         if (length(x) > 10) {
           ++num_long_words
           print x
       }
       print num_long_words, "words longer than 10 characters"
     }

See Sample Program, for a more detailed example of this type.

   The order in which elements of the array are accessed by this
statement is determined by the internal arrangement of the array
elements within `awk' and cannot be controlled or changed.  This can
lead to problems if new elements are added to ARRAY by statements in
BODY; you cannot predict whether or not the `for' loop will reach them.
Similarly, changing VAR inside the loop can produce strange results.
It is best to avoid such things.