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} }'