シェルスクリプトからawkまでのvarをパラメータとして使用します。
awk -v var = "blah1|blah2|blah3" -f awk_script.awk
すべてのゴミをハッシュセットに入れなければなりませんが、現在そうしています。私はそれを配列に入れ、配列を繰り返してハッシュセットに入れます。varを配列に最初に解析するのではなく、varを取得して変数をハッシュセットに直接置くなど、より良い操作を実行できますか?
split(var,arr,"|");
for ( i = 1; i <= length(arr); i++ )
{
dest = arr[i];
exclusion_destinations[dest];
}
オフラインで確認してみましょう。
if ( dest in exclusion_destinations )
{
// do something
}
ベストアンサー1
一度に複数の配列要素を設定する唯一の構成は関数ですsplit
(少なくとも標準awkではGNU awkに異なる可能性があるかもしれません)。これは数値インデックスに割り当てられます。したがって、連想配列を作成したい場合は、ループから抜け出すことはできません。
ただし、配列を使用しないように除外テストを変更できます。除外する文字列に正規表現特殊文字(().?*+[]\^$
)が含まれていない場合は、いくつか調整します。値を一致させる正規表現var
として扱うことができます。これは配列を使用するよりも少し遅くなるかもしれませんが、除外する文字列がたくさんない限り、それほど遅くはありません。
BEGIN { exclude = "^(" var ")$" }
match(dest, exclude) { … }
別のアプローチは、var
除外する文字列を連結すると考えることです。間にある場合はdest
除外されます。これは、正規表現のマッチングよりも遅いですが、除外リストが十分に大きい場合にのみ測定可能です。var
|
BEGIN { exclude = "|" var "|" }
index(dest, exclude) { … }