awk 関数呼び出しによる値の設定

awk 関数呼び出しによる値の設定

私はGNU Awk 5.1.0、API:3.0を使用しており、次のawkスクリプトがあります。テストの結果、関数パラメータを使用して入力として使用される変数を変更できないことがわかりました。したがって、以下の例では、を取得しますp: 21。これは、変数を関数にパラメータとして渡す限り、関数が終了した後にそれを他のものに変更することはできません。そうですか?

awk '
    function solarex_nuclmn(e) {
        e = 34
    }

    BEGIN {
        p = 21
        solarex_nuclmn(p)
        print "p: " p
    }
'

p: 34を使用して値を取得できることを知っていますreturn e

awk '
    function solarex_nuclmn(e) {
        e = 34
        return e
    }

    BEGIN {
        p = 21
        p = solarex_nuclmn()
        print "p: " p
    }
'

その後、グローバル変数を使用できます。ほとんどの人はグローバル変数の使用を避けたいです。

awk '
    function solarex_nuclmn(e) {
        G = 34
    }

    BEGIN {
        G = 21
        solarex_nuclmn()
        print "G: " G
    }
'

最後に配列を使用できます

awk '
    function solarex_nuclmn(a) {
        a[0] = 34
    }

    BEGIN {
        a[0] = 21
        solarex_nuclmn(a)
        print "a[0]: " a[0]
    }
'

それはすべてです。他の可能性はありませんかp: 34returnglobalまたは を使用しますarray。複数の値を変更するための最善の方法は、配列をパラメータとして渡すことです(配列要素の値を変更でき、追加の配列要素を追加できるため)。

関数の範囲外で、関数に値を変更させる移植可能な方法を探しています。しかし、GAWKの具体的な内容があれば聞きたいです。

ベストアンサー1

あなたが探しているものはよくわかりませんが、以下は、パラメータと戻り値の一般的な使用法を示すGNU awkの3つの関数の使用法です。

function f(a,b){ return a+b; }
function g(a,b){ A=a; B=b; }
function h(a,b){ SYMTAB[a] = SYMTAB[b]; }
BEGIN{
  A=99; B=88; a=77; b=66;
  x=f(1,2);   print "x=" x
  g(4,5);     print "A=" A, "B=" B
  h("A","B"); print "A=" A
}

f()たとえば、グローバル変数とを設定するx=f(1,2)ために使用できる値を返します。引数リストにないからです。気づいたg()ABa,bh()通貨名ここで、グローバル名は文字列として渡され、その名前のグローバル変数はSYMTABGNU組み込みシンボルテーブルを介してアクセスされます。これにより出力が生成されます。

x=3
A=4 B=5
A=5

おすすめ記事