如何从oratab中提取数据库版本

如何从oratab中提取数据库版本

我需要提取数据库版本以满足脚本要求。

我需要从中获取数据库详细信息oratab及其版本。

假设我在 oratab 中的条目如下:

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

在这里,我只需要提取特定数据库的数据库版本,例如 11 或 9。这意味着 shell 脚本应该只显示 11 或 9。

答案1

如果您的版本awk支持正则表达式作为字段分隔符,您可以执行以下操作:

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

或者,如果您也希望打印数据库名称:

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

我不确定 Solaris 或 AIX 版本是否awk支持正则表达式作为字段分隔符。 GNUawk确实如此。 FreeBSD 的版本也是如此。 mawkoriginal-awk这样做。

这应该在 Solaris 上工作awk(应该在任何 Solaris 上工作awk):

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

它会跳过以注释开头的行#,然后(对于包含 的所有行kmad)它会删除字段 5 中从第一个.开始的所有内容,然后打印该字段。

如果您有一些非常奇怪的问题awk,不理解字段分隔符或next语句中的正则表达式,请尝试以下操作:

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

如果你两者都awk没有sub(),那么它就不是awk,它是渡渡鸟。把它埋起来,得到一个真正的awk

相关内容