我有一些输出需要解析为如下所示的数组。条目数可以更改。
interface : eth1
ip address : 1.1.1.1 [Active]
subnet mask: 255.255.255.0
router : 1.1.1.2
name server: 1.1.1.3
dhcp server: 1.1.1.4
lease time : 86400
last update: Fri Jul 5 00:11:12 UTC 2013
expiry : Sat Jul 06 00:11:08 UTC 2013
reason : BOUND
interface : eth2
ip address : 2.2.2.2 [Active]
subnet mask: 255.255.255.0
router : 2.2.2.3
name server: 2.2.2.4
dhcp server: 2.2.2.5
lease time : 86400
last update: Fri Jul 5 03:03:41 UTC 2013
expiry : Sat Jul 06 03:03:39 UTC 2013
reason : REBOOT
每个部分都以界面开头,以原因结尾,原因后面的空行。
我对 bash 脚本很陌生,并且几乎尝试了所有我能想到的将每个部分放入一个变量的方法,但我似乎无法让它工作。如果这是任何其他语言......我可以在心跳中做到这一点!
基本上我想要的是一个数组,其中包含每个部分之间的所有细节(这些细节也可以改变并且没有那么多行)。
我用 awk、sed、grep 等尝试了许多不同的方法……它们似乎都没有让我到达我想去的地方。
它最终应该是什么样子:
$output_array[$1]=
interface : eth1
ip address : 1.1.1.1 [Active]
subnet mask: 255.255.255.0
router : 1.1.1.2
name server: 1.1.1.3
dhcp server: 1.1.1.4
lease time : 86400
last update: Fri Jul 5 00:11:12 UTC 2013
expiry : Sat Jul 06 00:11:08 UTC 2013
reason : BOUND
$output_array[$2]=
interface : eth1
ip address : 1.1.1.1 [Active]
subnet mask: 255.255.255.0
router : 1.1.1.2
name server: 1.1.1.3
dhcp server: 1.1.1.4
lease time : 86400
last update: Fri Jul 5 00:11:12 UTC 2013
expiry : Sat Jul 06 00:11:08 UTC 2013
reason : BOUND
谁能指出我正确的方向?谢谢!
我尝试过的一个例子,信息没有被拆分,或者我做错了什么!
output_array=echo $output | awk -v x="^$" -v n=1 '$0 ~ x {n++; next}{print}'
for items in $output_array; do
echo "ENTRY: $items"
done