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.