Perl:将文件读入哈希并拆分,检索信息

时间:2016-04-14 17:58:38

标签: perl hash

我有一个包含以下数据的文件:

1        unknown    state   3204563 3207049 .   -   .   name "gosford"; school_name "gosford"; pupil_id "P15240"; transcript_id "NM_001011874.1"; tss_id "TSS13146";

我想逐行读入哈希值,然后用正则表达式将其拆分。所以我可以算上学校的数量。]

到目前为止,我有:

my$schools;
open (SCHOOLS, <"$schools) or die (Cannot open $schools");
while <SCHOOLS> {
chomp;
my ($val, $key) = split /(^\d)\s+\w+\s+\W+\s+\d+\s+\d+\s+\d+\.\s+\+\s+\.\s+.. and so on);
}

如何获取我已分割为哈希值的值,然后对它们进行操作以生成一些基本统计信息?

1 个答案:

答案 0 :(得分:1)

你有点不清楚你会追求什么,但我会提供 - 你正在用艰难的方式使用长正则表达式匹配线。此外,对于“其他事情”,很难准确地说出你的想法。但grep是您的朋友,因为它允许您指定搜索字词。

这样的事情可以解决问题。我使用了一个简单的例子来计算符合特定标准的条目。当然,鉴于你只给了我们一行,这是一个猜测:

#!/usr/bin/env perl
use strict;
use warnings; 
use Data::Dumper;

my @entries; 
my @keys = qw ( id thing state firstnum secondnum ); 

while ( <DATA> ) { 
   my %attributes = m/(\w+) "(\w+)"/g;
   @attributes{@keys} = split;     
   push @entries, \%attributes; 
}

print Dumper \@entries; 

print "count of things: ", scalar @entries, "\n";
print "There are ", (scalar grep { $_ -> {state} eq "state" } @entries), " things with a state of 'state'\n";

__DATA__
1        unknown    state   3204563 3207049 .   -   .   name "gosford"; school_name "gosford"; pupil_id "P15240"; transcript_id "NM_001011874.1"; tss_id "TSS13146";

我还要指出 - 使用3个arg打开的词法文件句柄会更好。 E.g。

open ( my $schools, '<', 'schools.txt' ) or die $!; 
while ( <$schools> ) { 
     #etc.
}

我使用特殊文件句柄__DATA__用于说明目的。