2014-09-01 97 views
0

我试图找出集群配置后,如果它是活动的,并且使用shell脚本命名的节点的IP地址。以下是使用此处列出的shell命令时API输出的响应:http://docs.rackspace.com/cbd/api/v1.0/cbd-getting-started/content/viewing_Details.html如何使用shell脚本解析rackspace大数据api响应

+----------+--------------------------------------+ 
| Property | Value | 
+----------+--------------------------------------+ 
| Id | 4820deb2-6212-44f9-b92f-979fe723ffb8 | 
| Name | foo | 
| Status | ACTIVE | 
| Nodes | 3 | 
| Type | HADOOP_HDP2_1 | 
| Flavor | hadoop1-7 | 
+----------+--------------------------------------+ 

--------------+ 
| Id | Name | Role | Status | Public IP | Private IP | 
+--------------------------------------+--------------+----------+--------+----------------+----------------+ 
| f530a9f1-79a8-4378-bf2a-b7f7e0c2bdd3 | NAMENODE-1 | NAMENODE | ACTIVE | 166.78.132.85 | 10.190.240.88 | 

我相信我能使用某种正则表达式或SED/AWK的做到这一点。所以,只是为了澄清,我想提取的当前状态和公共IP

谢谢你在先进

+1

你想要的输出是什么? – 2014-09-01 01:53:17

+0

1提示:'provisionCheck | awk -F'|' 'NF == 8 && $ 2!='Id'{print“Stat =”$ 5“\ tIP =”$ 6}''。祝你好运。 – shellter 2014-09-01 02:05:26

+0

我希望的输出是第一部分活动和166.78.132.85第二部分 – N00b3eva 2014-09-01 11:02:12

回答

0

为了处理你的数据,可能更容易将其转换的格式更容易阅读,为此,使用此过滤器:

sed -e '/^+[-+]*$/d;s/^| //;s/ |$//;s/ | /|/g' 

,将您的第一个表格转换成

Property|Value 
Id|4820deb2-6212-44f9-b92f-979fe723ffb8 
Name|foo 
Status|ACTIVE 
Nodes|3 
Type|HADOOP_HDP2_1 
Flavor|hadoop1-7 

如果你愿意,你可以通过调整过滤器里删除页眉柯本:

sed -e '1,3d;/^+[-+]*$/d;s/^| //;s/ |$//;s/ | /|/g' 

然后,您可以用第二过滤器结合这不以任何方式进一步想要处理这些数据:

awk -F'|' '$1 == "Status" {print($2)}" 

您可以通过包装这些改进脚本的可读性和可维护性两步到功能,在你的脚本将这些功能组合:

# rackspace_canonize 
# Canonize output of racksapace report tools 
rackspace_canonize() 
{ 
    sed -e '1,3d;/^+[-+]*$/d;s/^| //;s/ |$//;s/ | /|/g' 
} 

# rackspace_extract_status 
# Extract the status field 
rackspace_extract_status() 
{ 
    awk -F'|' '$1 == "Status" {print($2)}' 
} 

# rackspace_extract_public_ip 
# Extract the public IP 
rackspace_extract_public_ip() 
{ 
    awk -F'|' '{print($5)}' 
} 

然后将下面的成分让你的状态:

rackspace_canonize | rackspace_extract_status 

组成如下的公网IP:

rackspace_canonize | rackspace_extract_public_ip 

请注意,您可以轻松地添加中介条件以缩小两个*extract*功能的输入。

+0

伟大的,我怎么能用这个获得第一个命名节点的IP地址? – N00b3eva 2014-09-01 11:04:46

+0

增加了如何获取IP。 – 2014-09-01 11:22:14

+0

感谢您的帮助,我已经修复了脚本中的错误,因为您有“在IP和状态功能的末尾,但是我只希望第一个IP可能? – N00b3eva 2014-09-01 16:38:17