0
我需要获取命令返回给我的一些行。新示例:在一行中从shell命令中提取多个变量
$ Return_Data
HOSTNAME:xpto.com.br
IP:255.255.255.0
DISKSPACE:1TB
LOCATION:argentina
我只需要LOCATION和IP线路,我需要将这些信息收集在一行中。我应该如何继续?我可以使用awk,shell,ksh等等。
我需要获取命令返回给我的一些行。新示例:在一行中从shell命令中提取多个变量
$ Return_Data
HOSTNAME:xpto.com.br
IP:255.255.255.0
DISKSPACE:1TB
LOCATION:argentina
我只需要LOCATION和IP线路,我需要将这些信息收集在一行中。我应该如何继续?我可以使用awk,shell,ksh等等。
最干净的解决方案本身并不是单行程。
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]}"
我假设你被点名了'time'为例 - 这是如果不是,则比大多数情况更复杂一点。有关详细信息,请参见[BashFAQ#32](http://mywiki.wooledge.org/BashFAQ/032),如果您想要具体关于捕获其输出的问题,那实际上应该在标题中。 –
...作为一个工作示例(针对ksh AJM 93u + 2012-08-01进行测试),使用'time'作为命令:'(time true)2>&1 | awk'/ real | sys/{print}'' –
...解释为什么这很有趣,顺便说一句 - 'time'是ksh和bash中的关键字;这不是一个普通的命令,甚至不是一个普通的内置命令。这使得它可以将管道作为参数,而不仅仅是一个简单的命令,因为常规的内建将仅限于做。 –