2012-07-17 79 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

相关问题