awkスクリプトはオプションパラメータを抽出します。

awkスクリプトはオプションパラメータを抽出します。

awk '{for(i=1;i<=NF;i++) if($i~/-f/) print $(i+1)}')次のコードスニペットのこの部分が何をしているかを説明できますか?

line='/wwws/apache/apache2.4.16w-r01/instroot/bin/httpd -f /www/csbe-int-fb-na/generated/httpd.conf -C ServerName int-b2vusii.bmwgroup.net -c PidFile /var/tmp/apache_csbe-int-fb-na/httpd.pid'
CONF=$(echo $line | awk '{for(i=1;i<=NF;i++) if($i~/-f/) print $(i+1)}')

オペランド:/www/csbe-int-fb-na/generated/httpd.conf -C

しかし、私はただ得なければなりません。/www/csbe-int-fb-na/generated/httpd.conf

ベストアンサー1

awkコード形式を再指定しました。

    for(i=1;i<=NF;i++)
        if($i~/-f/)
            print $(i+1)

forループは1からNF入力行のフィールド数まで繰り返されます。

$i入力行の各フィールド()が文字列リテラルの「-f」パターンと一致することを確認してください。

フィールドが「-f」と一致すると、コードは「-f」を含むフィールドの後にあるフィールドを印刷します。

私のRHELシステムでは、最終的には次のように印刷されます。

/www/csbe-int-fb-na/generated/httpd.conf -C

入力行を詳しく見てみると、「-f」だけで構成されたフィールドがあり、awk次のフィールドには「/www/csbe-int-fb-na/generated/httpd.conf」が印刷されています。 、混乱することに、フィールドに "-f" が含まれているため、for ループの次の反復では、スクリプトawkは "/www/csbe-int-fb-na/generated/httpd.conf" に "-f" が含まれていることがわかりましたします。だから、次のフィールド"-C"を印刷します。

必要なものがApache設定ファイルのみである場合は、フィールドが一致する必要があるパターンを修正して正確に一致させ、「-f awk」フィールドが見つかり、次のフィールドが印刷されたときにスクリプトを終了させることができます。

awk '{for(i=1;i<=NF;i++)if($i~/^-f$/) {print $(i+1); exit} }'

おすすめ記事