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 구성 파일뿐인 경우 필드가 일치해야 하는 패턴을 수정하여 정확하게 일치하도록 하고 awk"-f" 필드가 발견되고 다음 필드가 인쇄될 때 스크립트가 종료되도록 할 수 있습니다.

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

관련 정보