Go to the first, previous, next, last section, table of contents.

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つで呼び出します。ローカル変数iretは、引数とするようには考えられていません。maxeltに2つまたは3つの引数を渡すことができないわけではありませんが、その結果はおかしなものになります。関数のパラメータリストのiの前には余分なスペースがありますが、これは、iretは引数とするようには考えられていないことを示しています。これは、関数を定義する際に従うべき慣習です。

上記の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

Go to the first, previous, next, last section, table of contents.