RIGHT:寄稿:東條遼平 * 自作の関数を使う [#t5eda22b] Awkでは自作の関数を作成して使うことができます。 {myprint($1,$2)} function myprint(a,b, c){ c = a*b; print c; } これは第一項目と第二項目を掛けたものを出力しています。ここでmyprintは3つの仮引数があるにも関わらず、実引数は2つしか渡していません。これはAwkが局所変数が使えない為、自作の関数内でローカルに使う変数を扱おうと思って、 {myprint($1,$2)} function myprint(a,b){ c = a*b; print c; } こうやってしまうと、確かに動くのですが、変数Cはグローバルになりますので、例えば、 {c=$1;myprint($1,$2);print c} function myprint(a,b){ c = a*b; print c; } としたときに呼び出しもとのcの値が変わってしまいます。そのためローカルで使いたい分の変数を余分に仮引数として宣言しておきます。 {c=$1;myprint($1,$2);print c} function myprint(a,b, c){ c = a*b; print c; } こうすれば呼び出し元の値は変わりません。また、仮引数のcの前に沢山のスペースが入っているのは実際に関数を使う際に実引数を与える部分と、ローカルで使う分が分かるようにするためです。 C言語同様引数には値渡しとなります。 また値を返したり分岐したり再帰も行えます。 {print fact($1)} function fact(a){ if(a==1)return 1; return a*fact(a-1); } ちゃんと再帰ができています。