
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_CRAug 14: 2Sep 7: 1Business System name: OK_SVAug 14: 2Sep 7: 1
到目前为止,我已经创建了一个哈希,但我很惊讶如何计算每个日期并在每个业务系统头之后重置计数器.这是我的脚本:
#!/usr/bin/perluse 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 = ; next; } #print "$sect\n"; 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 = ; next; } #print "$sect\n"; 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 } }; 总结 以上是内存溢出为你收集整理的perl – 根据标题和日期计算行数全部内容,希望文章能够帮你解决perl – 根据标题和日期计算行数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)