我有一个包含以下数据的文件:
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);
}
如何获取我已分割为哈希值的值,然后对它们进行操作以生成一些基本统计信息?
答案 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__
用于说明目的。