我有一个select查询,它获取特定小时的所有订单(抱歉我稍后会复制db2查询),结果将存储在sample.txt文件中
输出如下,sample.txt
Time orders
12 AM 2000
1 AM 1000
2 AM 3000
3 AM 1500
5 AM 1900
6 AM 1000
查询中没有问题,在上面的sample.txt 4AM值中缺失。实际上在凌晨4点没有订单,所以逻辑上我的db2查询是正确的
但是我也想添加零订单时间,我希望输出如下
Time orders
12 AM 2000
1 AM 1000
2 AM 3000
4 AM 0
3 AM 1500
5 AM 1900
6 AM 1000
如果在特定小时没有下订单,我想打印零。我在Unix shell脚本中使用这个sample.txt。有任何建议来实现这一目标提前致谢
答案 0 :(得分:1)
这个怎么样?这是相当自我放纵,但确实有效!
package Time;
use strict;
use warnings;
use overload
'=' => \©,
'++' => \&increment,
'""' => \&to_string;
sub new {
my $class = ref $_[0] || $_[0];
bless [ split ' ', $_[1] ], $class;
}
sub copy {
my ($self) = @_;
my $class = ref $self;
bless [ @$self ], $class;
}
sub increment {
my ($self) = @_;
$self->[0] -= 12 if ++$self->[0] > 12;
$self->[1] =~ tr/AP/PA/ if $self->[0] == 12;
}
sub to_string {
my ($self) = @_;
join ' ', @$self;
}
package main;
use strict;
use warnings;
my $next;
while (<DATA>) {
if ( /^(\d+\s+[AP]M)\s+(\d+)/ ) {
$next = Time->new($1) unless $next;
until ( /^$next/ ) {
printf "%s %6d\n", $next++, 0;
}
$next++;
}
print;
}
__DATA__
Time orders
12 AM 2000
1 AM 1000
2 AM 3000
3 AM 1500
5 AM 1900
6 AM 1000
<强>输出强>
Time orders
12 AM 2000
1 AM 1000
2 AM 3000
3 AM 1500
4 AM 0
5 AM 1900
6 AM 1000
答案 1 :(得分:0)
使用from&amp ;;设置一个简单的时间范围定义表。到时间,然后计算每个范围内有多少行。某些范围可能没有行。