awk の変数はグローバルなので function と呼び出し元で同じ変数名を使っていると困ります。
% cat bar3.awk
function bar(x){
s=""
for( i = 0; i < x; i++){
s = s "*"
}
return s
}
{
i = 1
print bar($1)
print i
}
% echo 10 | awk -f bar3.awk
**********
10
i の値が “1” から “10” に変更されている。
function の引き数はローカル変数になる¶
function の引き数は唯一ローカル変数になるので function で使用する変数 i,s は、functionの引数の場所に記述します。
% cat bar4.awk
function bar(x, i,s){
s=""
for( i = 0; i < x; i++){
s = s "*"
}
return s
}
{
i = 1
print bar($1)
print i
}
% echo 10 | awk -f bar4.awk
**********
1
変数 x の後に空白を置いて i,s はローカル変数として使用するということを控えめに表しています。明示的にコメントにかいておくと後で見た時にわかりやすいと思います。
# x: [in] length
# i,s: local variables
function bar(x, i,s)
^空白
おわりに¶
「awkガナス」は今回で終了です。他にも「自炊本をスマートフォンで読むための convertガナス」という記事も書いています。ちょっと、仕事が多忙になって、更新が遅れていますが、よろしかったら読んでやってください。