awk文の変数をbash関数にパラメータとして渡す方法はありますか? [閉鎖]

awk文の変数をbash関数にパラメータとして渡す方法はありますか? [閉鎖]

awkbashスクリプトのステートメントを使用して、テキストファイル(たとえば、1、4、2、3など)で特定の値を見つけようとします。値がファイル(コマンドステートメント内)で見つかった場合は、awkステートメントの外部で関数を呼び出し、awk見つかった値をパラメータとして渡したいと思います。

私の質問:(1)これは可能ですか?それではどうでしょうか? (2) 不可能またはより良い方法がある場合はどうすればよいですか?

ファイルを検索すると、テキストファイルの最初の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

しかし、場合によっては、これがひどく悪影響を及ぼす可能性があります。

関連情報