oracle - 通过 awk 从 tnsnames.ora 获取连接数据
问题描述
我尝试构建基于来自 tnsnames.ora 的连接数据的自动化程序,tnsnames.ora 是数据库的 oracle 连接基础。
典型的 TNS 构建看起来像这样,但连接比 1 多得多:
"
MY_BASE=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=10.20.30.40)
(PORT=1234)
)
(CONNECT_DATA=
(SERVER=dedicated)
(SERVICE_NAME=MY_SERVICE)
)
)
"
我需要提取基本连接数据,这将是:BASE_NAME HOST PORT SERVICE_NAME 或多或少看起来像
MY_BASE 10.20.30.40 1234 MY_SERVICE
一些连接有不止一项服务,但我不会用这些来打扰你,因为我不知道最后如何使它成为变量:P
我的意思是在 jenkins 自动化中创建一个列表,并使其在复选框中返回连接列表。比我从这些连接数据中生成变量,这样我就可以同时在许多数据库上做同样的事情。
或多或少...
任何想法?阅读什么,找到什么,从 AWK 学习什么(因为它是一个大工具)。
此致!
解决方案
以下awk
可能会对您有所帮助(如果有多个 TNS 条目,它也应该可以工作)。
awk -F"[=)]" '
/^"/{
flag=1;
next}
flag && NF{
value=$1;
flag=""}
/HOST/{
value=value OFS $(NF-1);
next}
/PORT/{
value=value OFS $(NF-1);
next}
/SERVICE_NAME/{
print value OFS $(NF-1);
value=""}
END{
if(value){
print value}
}' Input_file
执行上述命令:假设以下是测试 Input_file。
cat Input_file
"
MY_BASE=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=yourip)
(PORT=1234)
)
(CONNECT_DATA=
(SERVER=dedicated)
(SERVICE_NAME=MY_SERVICE)
)
)
"
"
MY_BASE=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=yourip)
(PORT=1234)
)
(CONNECT_DATA=
(SERVER=dedicated)
(SERVICE_NAME=MY_SERVICE)
)
)
"
现在在运行上面的代码之后将输出。
MY_BASE yourip 1234 MY_SERVICE
MY_BASE yourip 1234 MY_SERVICE
推荐阅读
- flutter - 整数列表的基本操作
- twilio - 特维利奥
连接器选项? - android - 如何从 Android 项目的 build.gradle 运行 Kotlin 任务?
- python - 将字符串与“{”符号进行比较的问题
- r - R: Formattable -Column 不会根据条件更新
- angular - 什么时候在 Angular 中使用路由?
- python-3.x - 在连接期间停止 python 请求
- javascript - 为什么 Number 在我的 Teaspoon/Jasmine 规格测试中不是构造函数?
- bash - 如何抽象出 .Net Core 版本号?
- html - 对齐按钮内的项目