次の内容を含むtnsnames.oraファイルがあります。
NEWDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = linuxerp.de.mph.com)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = linuxerp.de.mph.com)(PORT = 1550))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = newdb)
)
)
LISTENER_DG11G =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = linuxerp.de.mph.com)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = linuxerp.de.mph.com)(PORT = 1550))
)
LISTENER_SABDB =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = linuxerp.de.mph.com)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = linuxerp.de.mph.com)(PORT = 1550))
)
STEST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = linuxerp.de.mph.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = STEST)
)
)
RBSDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = linuxerp.de.mph.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = RBSDB)
)
)
上記のファイルには、NEWDB =
LISTENER_DG11G =
LISTENER_SABDB =
STEST =
RBSDB =
データベース名と対応するサービス名が含まれています。SERVICE_NAME =
だから私は上記のファイルからデータベース名とそのサービス名を抽出してLinuxの.xlsファイルに入れました。
出力ファイルは次のようにする必要があります
NEWDB newdb
STEST STEST
RBSDB RBSDB
サービス名を持たないデータベースはすべて出力ファイルに追加しないでください。
最初の行セットを使用してCSPLIT
「X」ファイルに移動し、最初の行とSERVICE_NAMEを選択してファイルにcat X | grep -i "SERVICE_NAME" | cut -d "=" -f2 | rev | cut -d ")" -f2 | rev | awk "NF"
移動し、同じ方法で残りのデータベース名に追加しました。
ところがとても複雑に見えますね。これを行う方法について他のアイデアがあれば、大変感謝します。
ベストアンサー1
この問題を処理するより良い方法があると確信していますが、このawk
スクリプトのペアはそのタスクを実行します。拡大されたコメントバージョンまたは以下の1行のテキストを使用でき、機能的に同じです。
awk '
BEGIN { RS="" } # Slurp paragraphs
{ print gensub("\n", " ", "g") } # Replace NL with SPACE
' /tmp/tnsnames.ora | # ...in this file
awk '
/SERVICE_NAME/ { # Only process matching lines
listener=$1; # Listener is the first field
si=NF-2; # Count fields back from end of string
service=gensub(")", "", 1, $si); # Strip trailing ")"
printf "%s\t%s\n", listener, service # Output result
}
'
サンプルの実行
awk 'BEGIN { RS="" } { print gensub("\n", " ", "g") }' /tmp/tnsnames.ora | awk '/SERVICE_NAME/ { listener=$1; si=NF-2; service=gensub(")", "", 1, $si); printf "%s\t%s\n", listener, service }'
NEWDB newdb
STEST STEST
RBSDB RBSDB