2013-08-28 25 views
-2

我有一個這樣的輸出:如何使用perl拆分ND neigbour結果的結果?

IPv6 Address       Age Link-layer Addr State Circuit 
2001::1         0  00:30:88:13:28:b9 intf 1/1 vlan-id 100 
2001::2         62  00:00:00:00:00:00 incmp 1/1 vlan-id 100 
2002::1         0  00:30:88:13:28:b9 intf 1/1 vlan-id 101 
2002::2         63  00:00:00:00:00:00 incmp 1/1 vlan-id 101 
fe80::201:4ff:fe00:0     14  00:00:00:00:00:00 incmp 1/1 vlan-id 100 
fe80::230:88ff:fe13:28b9    0  00:30:88:13:28:b9 intf 1/1 vlan-id 100 
fe80::201:5ff:fe01:0     60  00:00:00:00:00:00 incmp 1/1 vlan-id 101 
fe80::230:88ff:fe13:28b9    0  00:30:88:13:28:b9 intf 1/1 vlan-id 101 

在這裏,我希望存儲單獨的年齡列的值。如何在這裏使用split或grep命令?

+2

歡迎SO,你嘗試過這麼遠嗎?我假設你已經加載了這個文件 - 你可以添加你至少擁有的Perl嗎?你能否澄清一下這是一種固定寬度的格式 - 它可以使事情變得非常簡單:-) –

回答

-1

如果您的列以固定寬度分隔(例如\ t或一定數量的空格),這很容易。假設他們不是,並假設你想讀你的文件,我會用一個簡單的正則表達式來提取年齡值,並且對於輸入文件的每一行(這裏是'input.txt')將它們推到一個名爲@age的數組。

#!/usr/bin/perl 
use strict; 
use warnings; 
use File::Slurp; 
use Data::Dumper; 
$Data::Dumper::Sortkeys = 1; 

my @input = read_file('input.txt'); 
shift @input; 

my @age; 
foreach (@input){ 
    my (@match) = ($_ =~ /\:\w+\s+(\d+)\s+/); 
    push @age, @match; 
} 

print Dumper (\@age); 

輸出:

$VAR1 = [ 
      '0', 
      '62', 
      '0', 
      '63', 
      '14', 
      '0', 
      '60', 
      '0' 
     ]; 

UPDATE

數據自卸車只是提供了可視化的東西在數據結構的一種方式。但是,如果你不想使用它,然後只需更改到:

#!/usr/bin/perl 
use strict; 
use warnings; 


my $input = 'input.txt'; 
open my $file, '<', $input or die "Can't open $input: $!"; 

my @age; 
while (<$file>){ 
    my (@match) = ($_ =~ /\:\w+\s+(\d+)\s+/); 
    push @age, @match; 
} 

foreach (@age){ 
    print "$_\n"; 
} 

輸出:

0 
    62 
    0 
    63 
    14 
    0 
    60 
    0 

在這兩種情況下,它不會改變代碼的工作方式,或者事實該信息被存儲在稱爲陣列@age

+0

實際上,我將在執行我的腳本時將這些數據作爲一個命令的輸出,並且從這個操作我應該爲最長的時間。如果它是0或 - 我也應該與其他值進行比較。 –

+0

我不明白你的意思。也許在問題上進一步闡述? – fugu

+0

僅限固定寬度。所以,即使你知道基於這個分裂也很好。 Plz不添加任何包和所有。這段代碼將成爲自動化腳本的一部分。所以在這裏輸出將被存儲到一些數組,並從那裏我需要單獨拆分年齡列值。 –

1
perl -anE 'next if $. == 1; say "age: $F[1]"' file 

找到最大年齡:

use List::Util qw(max); 
my $max_age = max map { (split)[1] } `command`; 

不含模塊:

my ($max_age) = sort { $b <=> $a } map { (split)[1] } `command`; 
+0

@AkshayaRamakrishnan檢查更新 –