Como extrair a versão do db do oratab

0

Eu tenho um requisito para extrair a versão do banco de dados para atender a um requisito de script.

Eu preciso buscar os detalhes do banco de dados de oratab e sua versão.

Suponha minha entrada no oratab como abaixo:

dbname1:/oracle/app/oracle/11.2.0.4/db_1:Y
dbname2:/oracle/app/oracle/9.2.0.3/db_1:Y

Aqui eu preciso extrair apenas as versões do banco de dados como 11 ou 9 para um banco de dados específico. O que significa que o script de shell deve exibir apenas 11 ou 9.

    
por SID 26.05.2016 / 12:53

1 resposta

2

Se a sua versão de awk suportar expressões regulares como o separador de campos, você pode fazer isso:

$ awk -F'[/.]' '{print $5}' oratab
11
9

alternativamente, se você quiser que o dbname seja impresso também:

$ awk -F'[:/.]' '{print $1,$6}' oratab 
dbname1 11
dbname2 9

Não tenho certeza se as versões do Solaris ou AIX de awk suportam regexps como separador de campo. GNU awk faz. O mesmo acontece com a versão do FreeBSD. mawk e original-awk também.

Isso deve funcionar no Solaris awk (deve funcionar em qualquer awk ):

awk -F'/' '/^#/ {next}; /kmad/ {sub(/\..*/,"",$5);print $5}' /etc/oratab

Salta as linhas que começam com um comentário # e, em seguida (para todas as linhas que contêm kmad ), retira tudo desde o primeiro . do campo 5 e imprime esse campo.

E se você tiver algum awk realmente estranho que não entende tanto o regexps no separador de campos ou a instrução next , tente isto:

awk -F'/' '! /^#/ && /kmad/ {sub(/\..*/,"",$5);print $5}' /etc/oratab

e se o seu awk também não tiver sub() , então não é awk , é um dodo . Enterre-o e receba um% realawk.

    
por 26.05.2016 / 13:00