To remove an individual element of an array, use the
Once an array element has been deleted, any value the element once had is no longer available. It is as if the element had never been referred to or been given a value. The following is an example of deleting elements in an array:
for (i in frequencies) delete frequencies[i]
This example removes all the elements from the array
Once an element is deleted, a subsequent
for statement to scan the array
does not report that element and the
in operator to check for
the presence of that element returns zero (i.e., false):
delete foo if (4 in foo) print "This will never be printed"
It is important to note that deleting an element is not the
same as assigning it a null value (the empty string,
foo = "" if (4 in foo) print "This is printed, even though foo is empty"
It is not an error to delete an element that does not exist.
However, if --lint is provided on the command line
gawk issues a warning message when an element that
is not in the array is deleted.
All the elements of an array may be deleted with a single statement
by leaving off the subscript in the
Using this version of the
delete statement is about three times
more efficient than the equivalent loop that deletes each element one
at a time.
NOTE: For many years, using
deletewithout a subscript was a
gawkextension. As of September, 2012, it was accepted for inclusion into the POSIX standard. See the Austin Group website. This form of the
deletestatement is also supported by Brian Kernighan’s
mawk, as well as by a number of other implementations (see Other Versions).
The following statement provides a portable but nonobvious way to clear out an array:42
(see String Functions)
clears out the target array first. This call asks it to split
apart the null string. Because there is no data to split out, the
function simply clears the array and then returns.
CAUTION: Deleting an array does not change its type; you cannot delete an array and then use the array’s name as a scalar (i.e., a regular variable). For example, the following does not work:a = 3 delete a a = 3
Thanks to Michael Brennan for pointing this out.