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: 34? return, global또는 을 사용합니다 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

관련 정보