perl – 根据标题和日期计算行数
发布时间:2020-12-16 06:15:33 所属栏目:大数据 来源:网络整理
导读:我有一个标签分隔文件格式: Business System Name: OK_CR Serial Numbr Service Name Program Name Epoch Start Time ------------ -------------------- -------------------- ------------------- GI1001TAA266 PPV 10 (50106) We Bought A Zoo Aug 14 20
|
我有一个标签分隔文件格式:
Business System Name: OK_CR Serial Numbr Service Name Program Name Epoch Start Time ------------ -------------------- -------------------- ------------------- GI1001TAA266 PPV 10 (50106) We Bought A Zoo Aug 14 2012 4:15AM GI1002TB3596 PPV 5 (50101) Help,The (2011) Aug 14 2012 6:30PM GI1002TDH825 PPV 2 (50098) Safe House Sep 7 2012 2:15AM Business System Name: OK_SV Serial Numbr Service Name Program Name Epoch Start Time ------------ -------------------- -------------------- ------------------- GI1001TAA266 PPV 10 (50106) We Bought A Zoo Aug 14 2012 4:15AM GI1002TB3596 PPV 5 (50101) Help,The (2011) Aug 14 2012 6:30PM GI1002TDH825 PPV 2 (50098) Safe House Sep 7 2012 2:15AM 我想计算按业务系统标题分隔的日期行数,我的意思是脚本的结果应该是这样的: Business System Name: OK_CR Aug 14: 2 Sep 7: 1 Business System Name: OK_SV Aug 14: 2 Sep 7: 1 到目前为止,我已经创建了一个哈希,但我很惊讶如何计算每个日期并在每个业务系统头之后重置计数器.这是我的脚本: #!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
open my $fh,'<','ppv.txt' or die $!;
my %data;
my $sect;
while (<$fh>) {
next if /^s+/;
if (/^Business System Name:s+(w+)/) {
$sect = $1;
next;
}
#print "$sectn";
if (defined $sect) {
next if /^Serial Numbr/;
next if /^------------/;
push @{ $data{$sect} },$_;
}
}
print Dumper %data;
这是脚本的结果: $VAR1 = {
'OK_CR' => [
'GI1001TAA266 PPV 10 (50106) We Bought A Zoo Aug 14 2012 4:15AM
','GI1002TB3596 PPV 5 (50101) Help,The (2011) Aug 14 2012 6:30PM
','GI1002TDH825 PPV 2 (50098) Safe House Sep 7 2012 2:15AM
'
],'OK_SV' => [
'GI1001TAA266 PPV 10 (50106) We Bought A Zoo Aug 14 2012 4:15AM
','GI1002TDH825 PPV 2 (50098) Safe House Sep 7 2012 2:15AM
'
]
};
关于如何从这里前进的任何想法? 解决方法
使用解压缩功能,如评论中所示,您只需跟踪每个日期的数字:
use strict;
use warnings;
use Data::Dumper;
open my $fh,'ppv.txt' or die $!;
my %data;
my $sect;
while (<$fh>) {
next if /^s+/;
if (/^Business System Name:s+(w+)/) {
$sect = $1;
next;
}
#print "$sectn";
if (defined $sect) {
next if /^Serial Numbr/;
next if /^------------/;
my $format = 'A57 A13 A*';
my($prefixes,$date,$suffixes) = unpack($format,$_);
$data{$sect}{$date}++;
}
}
print Dumper %data;
__END__
$VAR1 = {
'OK_CR' => {
' Aug 14 2012' => 2,' Sep 7 2012' => 1
},'OK_SV' => {
' Aug 14 2012' => 2,' Sep 7 2012' => 1
}
};
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
