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
.