我有一些工作(或任何项目/行动)及其开始和结束日期的列表。 现在,对于每天的每一分钟,我需要知道有多少工作是活跃的。
所以输入看起来像这样: (实际上我直接把它作为CSV)
Jobname | Start | End
---------------------------------------------------
JobA | 04/10/2015 08:00:00 | 04/10/2015 09:00:00
JobB | 04/10/2015 10:00:00 | 04/10/2015 10:00:59
JobC | 04/10/2015 10:00:00 | 04/10/2015 11:00:00
输出应如下所示:
注意:刚刚添加的作业名称是清晰的,在实际输出中我只对每分钟活动作业的数量感兴趣,而不是哪些作业处于活动状态
Time | Number of active jobs
---------------------------------------------------
04/10/2015 00:00:00 | 0
[..]
04/10/2015 08:00:00 | 1 (JobA)
04/10/2015 08:01:00 | 1 (JobA)
[..]
04/10/2015 09:00:00 | 1 (JobA)
04/10/2015 09:01:00 | 0
[..]
04/10/2015 09:59:00 | 0
04/10/2015 10:00:00 | 2 (JobB, JobC)
04/10/2015 10:01:00 | 1 (JobC)
[..]
04/10/2015 11:00:00 | 1 (JobC)
04/10/2015 11:01:00 | 0
[..]
04/10/2015 23:59:00 | 0
如何使用Perl实现这一目标?请注意,CPAN不可用,因此不幸的是不能选择。感谢您提供任何暗示!
答案 0 :(得分:0)
您需要如何解决这个问题:
Text::CSV
是一种选择,但在您的行的分隔符上使用split
将作为权宜之计。 Time::Piece
和strptime
将您的开始/停止时间转换为您可以在数字上进行比较的内容。 (epoch
)。hash
可能是作业的工具。 epoch
中)。 Time::Piece
也可以为您做到这一点。 start
和end
的元素,这些元素属于时间窗口。 grep
可以为您完成此操作。 注意 - 如果您没有CPAN
Text::CSV
可能无法获得。 Time::Piece
应该是,因为它是5.9.5的核心。否则,可能发现您可以使用date
命令来复制该功能。