script awk para extrair o argumento de uma opção

0

Alguém pode explicar o que a parte awk '{for(i=1;i<=NF;i++) if($i~/-f/) print $(i+1)}') faz no snippet a seguir

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

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

mas preciso de apenas /www/csbe-int-fb-na/generated/httpd.conf

    
por robotTech 15.12.2015 / 16:23

1 resposta

4

Eu reformatei o código awk :

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

O loop for itera de 1 a NF , o número de campos em qualquer linha de entrada.

Cada campo ( $i ) na linha de entrada é verificado para ver se corresponde ao padrão "-f", que é apenas um literal de string.

Se um campo corresponder a "-f", o código imprimirá o campo seguindo o campo que contém "-f".

Na minha caixa RHEL, isso acaba sendo impresso:

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

Se você olhar atentamente para a linha de entrada, há um campo que consiste exatamente em "-f" e, de fato, awk imprime o próximo campo, "/ www / csbe-int-fb-na / generated / httpd.conf "Confusamente, esse campo contém um" -f "incorporado, portanto, na próxima iteração do for-loop, o script awk localiza" / www / csbe-int-fb-na / generated / httpd. conf "contém" -f ", então imprime o próximo campo," -C ".

Se tudo o que você quer é o arquivo de configuração do Apache, você pode modificar o padrão que o campo deve corresponder para torná-lo uma correspondência exata e ter o script awk encerrado depois de encontrar o campo "-f" e imprimindo próximo campo.

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

Tags