2012-07-17 85 views
0

Im新增perl並希望從日誌文件中提取信息(名稱,DESCR,PID,VID,SN)以供使用。下面是日誌文件中的一個條目的示例。如何從perl提取日誌文件中的數據

NAME: "data1023", DESCR: "some information" 
PID: ABC-0123-xyz  , VID: V01 , SN: ABC1234567 

我嘗試使用分割使用逗號作爲分隔符,但它並沒有太大的幫助。有人會提出一個更好的方法來解決這個問題嗎?

+0

你能指定輸出的格式嗎?例如。 SN的樣子是什麼?它可以以數字開頭嗎? – Arithmomaniac 2012-07-17 05:58:06

+1

請給出一些額外的信息: 1:這兩個單獨的行或是包含在一行中的數據? 2:文件中是否存在雙引號? – drastogi 2012-07-17 06:01:54

+1

這確實是一些混亂的數據。你是否複製和粘貼,或手動輸入?我問,因爲在DESCR字段之後沒有逗號,在PID之後的逗號之前以及VID之後的逗號之前有空格。這些可能是固定寬度的字段,我想,但它只是看起來有幾個可能的錯別字。其中一個系統生成的日誌爲 – DavidO 2012-07-17 06:28:41

回答

3

你沒有給我們太多的信息,但是基於一些假設,包括但不限於每個條目的2-lins,這裏是你可以根據自己的喜好快速建立的解決方案。

#!/usr/local/bin/perl 

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

my $lineno; 
my @parts; 
my $entryno; 
my $line; 
my @log; 

while (<>) { 
    $line = $_; 
    chomp $line; 
    $lineno++; 
    if ($lineno % 2) { 

     #It is line one of the entry 
     $entryno++; 
     @parts = split(/,\s*/, $line); 
    } 
    else { 
     push(@parts, split(/,\s*/, $line)); 

     push(@log, [@parts]); 
    } 
} 

print Dumper(\@log); 

這一切都取決於你想如何對數據進行呈現。所有這一切都將每個條目的每個元素作爲一個數組項,然後將每個條目作爲數組項,構建一個數組數組。

+0

open(FH,「)閱讀文件儀式? – Bala 2012-07-18 05:57:30

+0

對!你可以做到這一點。最好使用像這樣open(my $ fh,「<」,「file.txt」)的3參數打開語句並將其用作while(<$fh>)' – Hameed 2012-07-18 06:43:48

+0

非常感謝:) – Bala 2012-07-18 06:55:17

相關問題