2013-12-14 25 views
0

有一個數據:perl的選擇特定的列並存儲到不同的陣列

set interfaces ge-1/0/2 unit 101 family inet address 10.187.132.3/27 vrrp-group 1 virtual-address 10.187.132.1 
set interfaces ge-1/0/2 unit 102 family inet address 10.187.132.35/27 vrrp-group 2 virtual-address 10.187.132.33 
set interfaces ge-1/0/2 unit 103 family inet address 10.187.132.67/27 vrrp-group 3 virtual-address 10.187.132.65 
set interfaces ge-1/0/2 unit 104 family inet address 10.187.132.99/27 vrrp-group 4 virtual-address 10.187.132.97 
set interfaces ge-1/0/2 unit 105 family inet address 10.187.132.131/27 vrrp-group 5 virtual-address 10.187.132.129 
set interfaces ge-1/0/2 unit 106 family inet address 10.187.132.163/27 vrrp-group 6 virtual-address 10.187.132.161 
set interfaces ge-1/0/2 unit 107 family inet address 10.187.132.195/27 vrrp-group 7 virtual-address 10.187.132.193 
set interfaces ge-1/0/2 unit 108 family inet address 10.187.132.227/27 vrrp-group 8 virtual-address 10.187.132.225 

我們需要提取一些列,並將其存儲到不同的變量。數據來自過濾文件後,因此它將是$ _。有什麼方法將它存儲到不同的陣列?

$address[0] = "10.187.132.3/27" 
$vrrp-group[0] = "1" 
$virtual-address[0] = "10.187.132.1" 

$address[1] = "10.187.132.35/27" 
$vrrp-group[1] = "2" 
$virtual-address[1] = "10.187.132.33" 

我採用分體式嘗試,但我不知道如何選擇上是很容易使用awk做perl的spesific柱(AWK {「打印$ 8」})。

@address = split(/\s+/, $_); 

但它失敗了。

預期結果:

@address:

$VAR1 = '10.187.132.3/27' 
$VAR2 = '10.187.132.35/27' 
$VAR3 = '10.187.132.67/27' 
$VAR4 = '10.187.132.99/27' 
$VAR5 = '10.187.132.131/27' 
$VAR6 = '10.187.132.163/27' 
$VAR7 = '10.187.132.195/27' 
$VAR8 = '10.187.132.227/27' 

@ VRRP備份組:

$VAR1 = '1' 
$VAR2 = '2' 
$VAR3 = '3' 
$VAR4 = '4' 
$VAR5 = '5' 
$VAR6 = '6' 
$VAR7 = '7' 
$VAR8 = '8' 

@虛擬地址:

$VAR1 = '10.187.132.1' 
$VAR2 = '10.187.132.33' 
$VAR3 = '10.187.132.65' 
$VAR4 = '10.187.132.97' 
$VAR5 = '10.187.132.129' 
$VAR6 = '10.187.132.161' 
$VAR7 = '10.187.132.193' 
$VAR8 = '10.187.132.225' 

回答

0

您可以使用-n-p-a來模擬類似的行爲。 分裂用空格線和@F陣列節省領域,所以你可以選擇你想要的位置:

perl -MData::Dumper -lane ' 
    push @array, { 
     q|address| => $F[8], 
     q|vrrp-group| => $F[10], 
     q|virtual-address| => $F[12] 
    }; 
    END { print Dumper \@array } 
' infile 

國債收益率:

$VAR1 = [ 
      { 
      'virtual-address' => '10.187.132.1', 
      'address' => '10.187.132.3/27', 
      'vrrp-group' => '1' 
      }, 
      { 
      'virtual-address' => '10.187.132.33', 
      'address' => '10.187.132.35/27', 
      'vrrp-group' => '2' 
      }, 
      { 
      'virtual-address' => '10.187.132.65', 
      'address' => '10.187.132.67/27', 
      'vrrp-group' => '3' 
      }, 
      { 
      'virtual-address' => '10.187.132.97', 
      'address' => '10.187.132.99/27', 
      'vrrp-group' => '4' 
      }, 
      { 
      'virtual-address' => '10.187.132.129', 
      'address' => '10.187.132.131/27', 
      'vrrp-group' => '5' 
      }, 
      { 
      'virtual-address' => '10.187.132.161', 
      'address' => '10.187.132.163/27', 
      'vrrp-group' => '6' 
      }, 
      { 
      'virtual-address' => '10.187.132.193', 
      'address' => '10.187.132.195/27', 
      'vrrp-group' => '7' 
      }, 
      { 
      'virtual-address' => '10.187.132.225', 
      'address' => '10.187.132.227/27', 
      'vrrp-group' => '8' 
      } 
     ]; 

UPDATE:腳本相當於先前的單線(見評論):

#!/usr/bin/env perl 

use warnings; 
use strict; 
use Data::Dumper; 

my @array; 

while (<>) { 
    chomp; 
    my @F = split; 
    push @array, { 
     q|address| => $F[8], 
     q|vrrp-group| => $F[10], 
     q|virtual-address| => $F[12] 
    }; 
} 

print Dumper \@array; 
+0

它如何在腳本里面實現? – rabka

+0

@rabka:哪個腳本?這是一個單線。在'END'部分中,您可以使用哈希數組來完成數據所需的任何操作。 – Birei

+0

是否可以將其插入到腳本中?我們如何做到這一點? – rabka