次のような配列に解析する必要がある出力がいくつかあります。エントリー数は変動する可能性があります。
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