El cuerpo de las funciones definidas por el usuario puede contener una sentencia return. Esta sentencia devuelve el control al resto del programa awk. Puede ser también usada para devolver un valor para que sea usado en el resto del programa. Esta sentencia presenta la siguiente forma:
return expresión
La parte expresión es opcional. Si se omite, entonces el valor devuelto es indefinido y, por lo tanto, impredecible. Una sentencia return sin valor de expresión se asume por defecto al final de todas las definiciones de función. Así que si el control llega al final de la definición de función, entonces la función devuelve un valor impredecible.
Aquí está un ejemplo de una función definida por usuario que devuelve el valor del número mayor contenido entre los elementos de un array:
function maxelt (vec, i, ret) { for (i in vec) {
if (ret == "" || vec[i] > ret) ret = vec[i]
}
return ret
}
Llamas a maxelt con un argumento, un nombre de array. Las variables locales i y ret no intentan ser argumentos; mientras no exista nada que te detenga de pasar dos o más argumentos a maxelt, los resultados serían extraños. El espacio extra antes de i en la lista de parámetros de la función es para indicar que i y ret no se suponen que sean argumentos. Esta es una convención que deberías seguir cuando definas funciones.
Aquí está un programa que usa nuestra función maxelt. Carga un array, llama maxelt, y entonces reporta el número máximo de ese 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)
}'
Dada la siguiente entrada:
1 5 23 8 16
44 3 5 2 8 26
256 291 1396 2962 100
-6 467 998 1101
99385 11 0 225
nuestro programa nos informa (predeciblemente) que:
99385
es el número mayor en nuestro array.
0 Comentarios