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 文記述する (これも省略可)