6

以下によって呼び出される awk スクリプトがあります。

awk -f myawkfile.awk arguments

awk スクリプトは、前述の同じ呼び出しを使用して bash スクリプトに呼び出されます。

awk スクリプトを呼び出す代わりに、bash スクリプトで関数として宣言できますか。awkコード全体に in front と back tick を書いて、関数名を割り当てて自由に呼び出すことは簡単だと思いました。どういうわけか、それはうまくいきません。

スクリプトを別のスクリプトに依存させたくないので、これを実行しようとしています。そして、私はawkスクリプトを書いた人ではありません。ファイルを入力として受け取り、いくつかのことを行い、スクリプトで使用される変更されたファイルを返します。

4

2 に答える 2

10

ヒアドキュメント表記を使用すると、次のように書くことができます

#!/bin/bash

awk_program=$(cat << 'EOF'
    /* your awk script goes here */
EOF
)

# ...

# run awk script
awk "$awk_program" arguments

# ...
于 2012-07-24T11:51:33.520 に答える
3

関数にawkスクリプトを書くだけです。

#!/bin/sh -e

foo() { awk '{print $2}' "$@"; }
foo a b                         # Print the 2nd column from files a and b
printf 'a b c\nd e f\n' | foo   # print 'b\ne\n'

空の文字列が引数として渡された場合のawk標準の動作はあいまいに見えますが、シェル"$@"は空の文字列ではなくゼロフィールドに展開されることを保証しているためfoo、空の引数で呼び出す場合にのみ問題になることに注意してください。

于 2012-07-24T15:04:26.697 に答える