perl – 根据标题和日期计算行数

perl – 根据标题和日期计算行数,第1张

概述我有一个标签分隔文件格式: Business System Name: OK_CR Serial Numbr Service Name Program Name Epoch Start Time ------------ -------------------- ------------------ 我有一个标签分隔文件格式:

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 – 根据标题和日期计算行数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1236396.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存