Colunas de impressão AWK com base no número da coluna e na condição de correspondência do padrão

0

Eu preciso reformatar a saída do seguinte comando usando awk para números de coluna estáticos e dinâmicos:

 ps -eopid,lstart,cmd | grep java |grep -v grep

seguinte seria a entrada de amostra para o comando awk:

17524 Wed May  9 08:50:37 2018 /opt/java/latest/bin/java -client -Xms256m -Xmx512m -XX:CompileThreshold=8000 -XX:PermSize=128m -XX:MaxPermSize=256m -Dweblogic.Name=AdminServer -Djava.security.policy=/app/oracle/wls1036/wlserver_10.3/server/lib/weblogic.policy -Dweblogic.system.BootIdentityFile=/projects/domainName/servers/AdminServer/security/boot.properties -Dweblogic.nodemanager.ServiceEnabled=true -Xverify:none -da -Dplatform.home=/app/oracle/wls1036/wlserver_10.3 -Dwls.home=/app/oracle/wls1036/wlserver_10.3/server -Dweblogic.home=/app/oracle/wls1036/wlserver_10.3/server -Ddomain.home=/projects/domainName -Does.client.home=/app/oracle/wls1036/oesclient -Doracle.home=/app/oracle/wls1036/oesclient -Doracle.security.jps.config=/projects/mydomain/config/oeswlssmconfig/AdminServer/jps-config.xml -Dweblogic.management.discover=true -Dwlw.iterativeDev= -Dwlw.testConsole= -Dwlw.logErrorsToConsole= -Dweblogic.ext.dirs=/app/oracle/wls1036/patch_wls1036/profiles/default/sysext_manifest_classpath:/app/oracle/wls1036/patch_ocp371/profiles/default/sysext_manifest_classpath weblogic.Server

Exemplo de saída:

24519 Wed May 9 23:50:09 2018 -Dweblogic.Name=AdminServer

Problema: Sou capaz de imprimir o valor do PID inicial, data e hora de inicialização com base no número da coluna usando awk, mas o número da coluna do último valor pode ser diferente nos casos (por exemplo: column9 em uma saída e coluna 17 em outra ). Como posso imprimir o último valor pesquisando o número da coluna correspondente que contém a palavra-chave "-Dweblogic.Name=" e adicionar à saída existente. Combinando saída para números de coluna e pesquisa de coluna está lançando exceção. Qualquer maneira mais fácil de formatar esta saída é bem-vinda também usando (sed, grep, cut etc).

    
por Dexter 09.05.2018 / 16:18

2 respostas

0

para obter a coluna, use um loop

| awk '{for(i=$NF;i>1;i--) 
     if ( $i ~ /-Dweblogic.name/ ) { wln=$i; break } ;
     printf "... %s ...",wln}'

onde

  • $NF é o último campo
  • for( ) construct irá fazer um loop a partir do final da linha para começar
  • $i ~ /-Dweblogic.name/ match -Dweblogic.name = admin1, -Dweblogic.name = otheradmin (você pode querer que o / ^ - D / não seja o mesmo)

Posso sugerir que você baixe grep java | grep -v grep para grep [j]ava , que não irá agradar a ele (e surpreender o colega de trabalho) ou

| awk '/java/ {...} '

ou, para ter um número principal de arg:

| awk '/java/ && NF>10 { ... }'
    
por 09.05.2018 / 17:04
0

Talvez você possa pesquisar o Dweblogic com o grep e depois com o sed

search="-Dweblogic.Name="
ps -eopid,lstart,cmd | \
grep "java.*$search" | \
sed -E 's#([^/]* )/.*('"$search"'[^ ]*).*##'
    
por 10.05.2018 / 17:42