私はawkスクリプトを持っています:
awk -f myawkfile.awk arguments
awkスクリプトは同じ呼び出しを使用してmy bashスクリプトに呼び出されます。
awkスクリプトを呼び出す代わりに、それをbashの関数として宣言することはできますか スクリプト。私はそれを書くことで簡単だろうと思った awk
前後に コード全体をチェックしてから、それを呼び出すための関数名を割り当てます。 どういうわけかそれはトリックをしません。
スクリプトを別のスクリプトに依存させたくないので、これを実行しようとしています。 私はその人を書いた人ではない awk
スクリプト。それはファイルを入力として受け取り、 私のスクリプトで使用されている変更されたファイルを返す。
回答:
回答№1については9使用 ヘレドック記法 1つはこのようなものを書くことができます
#!/bin/bash
awk_program=$(cat << "EOF"
/* your awk script goes here */
EOF
)
# ...
# run awk script
awk "$awk_program" arguments
# ...
回答№2については2
awkスクリプトを関数に書くだけです:
#!/bin/sh -e
foo() { awk "{print $2}" "$@"; }
foo a b # Print the 2nd column from files a and b
printf "a b cnd e fn" | foo # print "bnen"
空の文字列が引数として渡された場合、awkの標準はあいまいであるように見えますが、シェルは "$@"
空の文字列ではなくゼロのフィールドに展開されるので、呼び出した場合にのみ問題になります foo
空の引数で。