需要幫助在下面的日期和時間戳串列中提取開始和結束日期
假設我有以下從日志檔案中提取的時間戳資料,并且只需要提取每個日期和時間的開始和結束。輸出將用于計算開始到結束之間的時間差。
資料
2021-Oct-11 16:27:39
2021-Oct-11 16:28:10
2021-Oct-11 16:30:47
2021-Oct-11 16:30:47
2021-Oct-12: 09:27 03
2021-Oct-12
10:27:03 2021-Oct-12 18:22:15
2021-Oct-13 08:57:16
2021-Oct-13 08:57:37
2021-Oct-13:11 25
2021-Oct-13 11:33:25
2021-Nov-08 16:45:17
2021-Nov-08 16:49:10
2021-Nov-08 17:00:50
2021-Nov-08:22 24
2021 - 11月- 09十一時51分35秒
2021 - 11月- 09十一點52分四十秒
2021 - 11月- 09 12時14分39秒
2021 - 11月- 09十四時23分10秒
... ...
... ...
... ...
預期輸出
開始:2021-Oct-11 16:27:39
結束:2021-Oct-11 16:30:47
開始:2021-Oct-12 09:27:03
結束:2021-Oct-12 18:22:15
開始:2021-Oct-13 08:57:16
結束:2021-Oct-13 11:33:25
開始:2021-Nov-08 16:45:17
結束:2021-Nov-08 22:10:24
開始: 2021-Nov-09 11:51:35
結束:2021-Nov-09 14:23:10
下面是我的腳本,但我只設法提取了開始資料
%key;
while ( <IN> ) {
$_=~ s/^\s |\s $//g;
my ($saved_date, $record_date);
chomp ;
my ($k, $d) = split;
if (! exists $key{ $k } ) {
$key{ $k } = $d;
my ($dtformat) = $d =$dtformat;
$end_date = Time::Piece->strptime($_, $dtformat);
next;
my ($dtformat) = $key{ $k } = $dtformat;
$saved_date = Time::Piece->strptime($_, $dtformat);
my ($dtformat) = $d =$dtformat;
$record_date = Time::Piece->strptime($_, $dtformat);
if ( $record_date - $saved_date > 0 ) {
$key{ $k } = $d;
}
}
}#endofwhile
for ( sort keys %key ) {
print "begin: ", $_, " ",$key{ $_ },"\n";
}
輸出
開始:2021-Nov-08 16:45:17
begin:2021-Nov-09 11:51:35
begin:2021-Oct-10 21:59:39
begin:2021-Oct-11 00:21:46
begin : 2021-Oct-12 09:27:03
開始: 2021-Oct-13 08:57:16
開始: 2021-Sep-30 00:21:23
需要幫助如何獲得“結束”部分
謝謝
uj5u.com熱心網友回復:
秘密在于您用來存盤資料的資料結構。由于您對一天的第一個和最后一個時間戳感興趣,因此我構建了一個以日期為鍵的哈希,其中該值是一個包含當天所有時間戳的陣列。然后我們可以對每一天的時間戳進行排序,并輕松提取最早和最新的時間戳。
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
use Time::Piece;
# The hash where we'll store our data
my
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/366779.html
