2013-06-05 34 views
0

要分开不同的价值观,使他们的变量:如何区分不同的价值观,使他们变量

db2 
Attempting to contact (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=TCP)(HOST=server1)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME=db2))) OK (0 msec) 
db1 
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL= TCP)(Host= 10.1.1.1)(Port= 1521)) (CONNECT_DATA = (SERVICE_NAME =db1))) TNS-12541: TNS:no listener 
xdb3 
TNS-03505: Failed to resolve name 

也行重命名为有效,而当得到任何不同的结果,以获取无效像大小写为“TNS:no listener”或“TNS-03505:无法解析名称”,并在其后添加未知字符串,因为没有附加数据。

预期查看:

db2,active,server1 
db1,inactive,10.1.1.1 
xdb3,inactive,unknown 
+0

那么,你尝试过什么?你卡在哪里?只是要求别人从头开始你的工作并不好。 :( – ams

+0

所以我执行这个命令: 'DB =“xdb3 db1 db2”; for $ in $ DB; do echo $ x; tnsping $ x | awk'{a [NR%2] = $ 0} END {for i = NR + 1; i <= NR + 2; i ++)打印[i%2]}'| sed'/^$/d'| sed':a; N; $!ba; s/\ n// g'; done' 但是坚持让这个结果变成逗号分隔的变量... –

+0

解决方案不适合你吗? –

回答

3
perl -ne 'chomp;push @r,$_}{ ($m)=$r[$_] =~ /host=\s*([^)]+)/i, print ("$r[$_-1],", $m? "active,$m\n":"inactive\n") for grep $_%2, 0..$#r;' logfile 

修改后的版本,

perl -ne 'chomp; if($. % 2){print "$_,";next;} ($m)=/host=\s*([^)]+)/i; print ((/\bOK\b/ ? "active," :"inactive,"), $m||"unknown","\n")' logfile 
+0

再次感谢和意见,下次将创建新的职位 得到一些错误: 未定义的子程序&main ::称为-e行1,<>行2. –

+0

我明白了:无法识别的开关:-E(-h将显示有效的选项)。 –

+0

是的,我用perl 5.8.8,但现在拿到输出: 'DB2, 活跃, DB1, 不活跃, xdb3, 不活跃,'后,每列一切都是新行。 –

2

如果您已经使用perl的,我建议是这样的:

#!/usr/bin/perl 

use strict; use warnings; 

my $name; 
while (<DATA>) { 
    if ($. % 2) { chomp; ($name = $_)=~ s/\s+$//; next; } 
    if (/HOST=([^)]+)/i) { print "$name,active,$1\n"; 
    } else { print "$name,inactive\n"; 
    } 
} 

__DATA__ 
db2  
Attempting to contact (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=TCP)(HOST=server1)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME=db2))) OK (0 msec) 
db1  
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL= TCP)(Host= 10.1.1.1)(Port= 1521)) (CONNECT_DATA = (SERVICE_NAME = db1))) OK (0 msec) 
xdb3 
TNS-03505: Failed to resolve name 

输出:

db2,active,server1 
db1,active, 10.1.1.1 
xdb3,inactive 

当然,你应该使用输入文件,而不是DATA文件句柄。

相关问题