2016-01-05 58 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]}" 
相关问题