/ / bash - regex、linux、bash、awkでawk関数を宣言する

bash - regex、linux、bash、awkでawk関数を宣言する

私は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 空の引数で。