2016-01-05 57 views
0

我需要獲取命令返回給我的一些行。新示例:在一行中從shell命令中提取多個變量

$ Return_Data 
HOSTNAME:xpto.com.br 
IP:255.255.255.0 
DISKSPACE:1TB 
LOCATION:argentina 

我只需要LOCATION和IP線路,我需要將這些信息收集在一行中。我應該如何繼續?我可以使用awk,shell,ksh等等。

+0

我假設你被點名了'time'爲例 - 這是如果不是,則比大多數情況更復雜一點。有關詳細信息,請參見[BashFAQ#32](http://mywiki.wooledge.org/BashFAQ/032),如果您想要具體關於捕獲其輸出的問題,那實際上應該在標題中。 –

+1

...作爲一個工作示例(針對ksh AJM 93u + 2012-08-01進行測試),使用'time'作爲命令:'(time true)2>&1 | awk'/ real | sys/{print}'' –

+0

...解釋爲什麼這很有趣,順便說一句 - 'time'是ksh和bash中的關鍵字;這不是一個普通的命令,甚至不是一個普通的內置命令。這使得它可以將管道作爲參數,而不僅僅是一個簡單的命令,因爲常規的內建將僅限於做。 –

回答

1

最乾淨的解決方案本身並不是單行程。

typeset -A data     # Create an associative array. 
while IFS=: read -r key value; do # Iterate over records, splitting at first : 
    data[$key]=$value    # ...and assign each to that map 
done < <(Return_Data)    # ...with your command as input. 

# ...and, to use the extracted values: 
echo "Hostname is ${data[HOSTNAME]}; location is ${data[LOCATION]}" 

這就是說,你可以 - 當然 - 把所有這些線路與;小號他們之間在一起:

# extract content 
typeset -A data; while IFS=: read -r key value; do data[$key]=$value; done < <(Return_Data) 

# demonstrate its use 
echo "Hostname is ${data[HOSTNAME]}; location is ${data[LOCATION]}" 
相關問題