awk 문의 변수를 bash 함수에 매개변수로 전달하는 방법이 있습니까? [폐쇄]

awk 문의 변수를 bash 함수에 매개변수로 전달하는 방법이 있습니까? [폐쇄]

awkbash 스크립트의 명령문을 사용하여 텍스트 파일(예: 1 또는 4 및 2 또는 3)에서 특정 값을 찾으려고 합니다. 값이 파일(명령문 내)에서 발견되면 awk명령문 외부에서 함수를 호출 awk하고 찾은 값을 매개변수로 전달하고 싶습니다.

내 질문: (1) 이것이 가능합니까? 그렇다면 어떨까요? (2) 불가능하거나 더 좋은 방법이 있으면 어떻게 합니까?

파일을 검색할 때 텍스트 파일의 처음 두 줄을 건너뛰었습니다. 저는 GNU AWK를 사용하고 있습니다. 추가 설명이 필요하면 알려주시기 바랍니다.

**교차 게시에 대해 미리 사과드리며, 원하는 답변을 얻지 못하고 있습니다.

파일.txt

Name  Col1  Col2  Col3  
-----------------------
row1  1     4     7        
row2  2     5     8         
row3  3     6     9 

실제 retrieve기능은 이 단순화된 예보다 훨씬 더 복잡합니다. 따라서 이 함수를 명령문에 넣고 싶지 않기 때문에 이 함수를 호출해야 합니다 awk.

function retrieve {
    if [[ "$1" == "1" ]]; then
        echo "one beer on the wall"
    elif [[ "$1" == "4" ]]; then
        echo "four beers on the wall"
    fi
}

function retrieve2 {
    if [[ "$1" == "2" ]]; then
        echo "two beers on the wall"
    elif [[ "$1" == "3" ]]; then
        echo "three beers on the wall"
    fi
}

awk -F '\t' '
    FNR < 2 {next}
    FNR == NR {
        for (i=2; i <= NF; i++) 
        {
            if (($i == 1) || ($i == 4))
                printf(%s, "'retrieve "$i" '")    # Here is the problem

            if (($i == 2) || ($i == 2))
                printf(%s, "'retrieve2 "$i" '")    # Here is the problem
        }
    }

' file.txt

답변1

이를 수행하는 추악한 방법(예: 의 출력을 기반으로 셸에서 함수 호출을 트리거하는 것 awk)은 다음과 같습니다.

awk -F '\t' '
    FNR < 2 {next}
    FNR == NR {
        for (i=2; i <= NF; i++) {
            if (($i == 1) || ($i == 4))
                printf "retrieve %s\n", $i

            if (($i == 2) || ($i == 2))
                printf "retrieve2 %s\n", $i
        }
    }

' file.txt | while read l; do eval $l; done

그러나 어떤 경우에는 이것이 심하게 역효과를 낳을 수 있습니다.

관련 정보