return文
ユーザ定義関数の本体には、return文を含めることができます。この文は、制御をawkプログラムの残りの部分に渡します。また、この文はawkプログラムの残りの部分で使うために、値を返すのに使うこともできます。これは次のようになります。
return expression
expressionの部分は省略できます。省略された場合は、戻り値が未定義のため、予測することはできません。
値の式を持たないreturn文は、関数定義の終りにあることが仮定されます。したがって、制御が関数定義の終りに達した場合、返される値は予測できません。
配列の要素の中で最も大きな数の値を返す、ユーザ定義関数の例を次に示します。
function maxelt (vec, i, ret) {
for (i in vec) {
if (ret == "" || vec[i] > ret)
ret = vec[i]
}
return ret
}
maxeltは配列名である引数1つで呼び出します。ローカル変数iとretは、引数とするようには考えられていません。maxeltに2つまたは3つの引数を渡すことができないわけではありませんが、その結果はおかしなものになります。関数のパラメータリストのiの前には余分なスペースがありますが、これは、iとretは引数とするようには考えられていないことを示しています。これは、関数を定義する際に従うべき慣習です。
上記のmaxelt関数を使ったプログラムを次に示します。このプログラムは、配列をロードし、maxeltを呼び出し、その配列の中で一番大きな数を表示します。
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)
}'
次のような入力を与えた場合、
1 5 23 8 16 44 3 5 2 8 26 256 291 1396 2962 100 -6 467 998 1101 99385 11 0 225
このプログラムは、次の数が、与えた配列中の一番大きな数であることを報告します(予想どおり)。
99385