2014-09-01 95 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