配列を分割し、awkに設定されたハッシュに値を送信します。

配列を分割し、awkに設定されたハッシュに値を送信します。

シェルスクリプトから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) { … }

おすすめ記事