ユーザ定義関数

awk は独自の組み込み関数 (function) を持っている.

関数の定義

ここではまず簡単な例を挙げて, 関数を定義する方法について説明しよう. まず2つの数の合計を返す関数である.

scpt18_2.awk

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/usr/local/bin/gawk -f
# scpt18_2.awk

function add(a, b){
    return a + b
}

BEGIN{
    x = add(4, 6)
    print x
}

scpt18_2.awk の実行結果は:

bash-3.2$ ./scpt18_2.awk
10

scpt18_2_1.awk

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/usr/local/bin/gawk -f
# scpt18_2_1.awk

function add(a, b){
    print "関数の中です 1"
    return a + b
    print "関数の中です 2"
}

BEGIN{
    x = add(4, 6)
    print x
}

scpt18_2_1.awk の実行結果は:

bash-3.2$ ./scpt18_2_1.awk
関数の中です 1
10

上のスクリプトを実行すると, return 文の後の print 文は無視されるのがわかるでしょう.

scpt18_3.awk

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#!/usr/local/bin/gawk -f
# scpt18_3.awk

function whichIsLarger(a, b){
    if(a >= b)
	return a
    else
	return b
}

BEGIN{
    print whichIsLarger(6, 9)
    print whichIsLarger(12, 8)
}

scpt18_3.awk の実行結果は:

bash-3.2$ ./scpt18_3.awk
9
12

ここで awk のユーザ定義関数についてまとめておこう:

1) 関数の定義
function 関数名(引数の並び){
  文
  文
  ...
  return 返値
}

2) 関数呼び出し
  関数名(引数の並び)

(注意):

関数定義は, キーワード function で始まる
関数定義は BEGIN 部, 本処理部, END 部の以外のどこに書いても良い
関数名はアルファベットかウアンダーバー "_" で始まる
関数名と () の間は続けて書く
引数は省略可, また複数の場合は, コンマ "," で区切る
関数の返値は, return 文記述する (これも省略可)

Table Of Contents

Previous topic

awk の連想配列

Next topic

ユーザ定義関数 (続き)