return
Statement
The body of a user-defined function can contain a return
statement.
This statement returns control to the rest of the awk
program. It
can also be used to return a value for use in the rest of the awk
program. It looks like this:
return [expression]
The expression part is optional. If it is omitted, then the returned value is undefined and, therefore, unpredictable.
A return
statement with no value expression is assumed at the end of
every function definition. So if control reaches the end of the function
body, then the function returns an unpredictable value. awk
will not warn you if you use the return value of such a function.
Sometimes, you want to write a function for what it does, not for
what it returns. Such a function corresponds to a void
function
in C or to a procedure
in Pascal. Thus, it may be appropriate to not
return any value; you should simply bear in mind that if you use the return
value of such a function, you do so at your own risk.
Here is an example of a user-defined function that returns a value for the largest number among the elements of an array:
function maxelt(vec, i, ret) { for (i in vec) { if (ret == "" || vec[i] > ret) ret = vec[i] } return ret }
You call maxelt
with one argument, which is an array name. The local
variables i
and ret
are not intended to be arguments;
while there is nothing to stop you from passing two or three arguments
to maxelt
, the results would be strange. The extra space before
i
in the function parameter list indicates that i
and
ret
are not supposed to be arguments. This is a convention that
you should follow when you define functions.
Here is a program that uses our maxelt
function. It loads an
array, calls maxelt
, and then reports the maximum number in that
array:
awk ' function maxelt(vec, i, ret) { for (i in vec) { if (ret == "" || vec[i] > ret) ret = vec[i] } return ret } # Load all fields of each record into nums. { for(i = 1; i <= NF; i++) nums[NR, i] = $i } END { print maxelt(nums) }'
Given the following input:
1 5 23 8 16 44 3 5 2 8 26 256 291 1396 2962 100 -6 467 998 1101 99385 11 0 225
our program tells us (predictably) that 99385
is the largest number
in our array.
Go to the first, previous, next, last section, table of contents.