我在log.txt文件一個日誌文件,我想排序與最新的登錄用戶名Perl程序利用最新登錄
例 - 如果用戶保羅2個登錄一月和一個登錄二月份應採取 二月的登錄信息(至於保羅最後一次登錄)
輸入文件:log.txt--
Administrator-25/02/2013
Administrator-26/03/2013
輸出FILE-
Administrator-26/03/2013
我在log.txt文件一個日誌文件,我想排序與最新的登錄用戶名Perl程序利用最新登錄
例 - 如果用戶保羅2個登錄一月和一個登錄二月份應採取 二月的登錄信息(至於保羅最後一次登錄)
輸入文件:log.txt--
Administrator-25/02/2013
Administrator-26/03/2013
輸出FILE-
Administrator-26/03/2013
如果您可以將日期轉換爲ISO格式,則可以使用簡單的字符串比較。請參閱xkcd on ISO 8601。
#!/usr/bin/perl
use warnings;
use strict;
sub later {
my @dates = @_;
for my $date (@dates) {
$date = join '/', (split m(/), $date)[2, 1, 0]; # Fix StackOverflow's syntax highlighting:/
}
return $dates[0] lt $dates[1];
}
my @lines = qw(Administrator-25/02/2013
Administrator-26/03/2013
Guest-01/01/2012
Administrator-01/01/2012
);
my $user = 'Administrator';
my $last = q();
for my $line (@lines) {
next unless 0 == index $line, "$user-";
my $date = (split /-/, $line, 2)[1];
$last = $date if later($last, $date)
}
print "$last\n";
爲微超長一個襯墊
perl -F\- -l -a -n -e ' $d=join(q(/),reverse split(q(/), $F[1])); $l{$F[0]}=$d if (!exists($l{$F[0]}) || $l{$F[0]} lt $d); END{ for (sort keys(%l)) { $v=$l{$_}; print "$_-",$l{$_} }}' logfile.txt
自動分割上 - 並填充基於最大日哈希
輸出是「反向」日期順序因爲這是我用什麼比較
使用Unix時間比較日期:
#!/usr/bin/perl
use strict;
use warnings;
use POSIX qw(mktime);
$\="\n";
open my $fh, '<','log.txt' or die $!;
my %h1;
while(<$fh>){
chomp;
my ($user,$date,$mon,$year)=split(/[\/-]/); #Split record
my $tm=mktime(0,0,0,$date,$mon-1,$year-1900); # Calculate the epoch
if (!exists$h1{$user} or ($h1{$user}<$tm)){ # store the bigger value in hash with the use as the key
$h1{$user}=$tm;
}
}
# Sort the hash on the basis of the key and print it
foreach my $k (sort keys%h1){
my @val=localtime($h1{$k});
$val[4]+=1;
$val[5]+=1900;
print $k,'-',join "/",@val[3..5];
}
輸入文件(log.txt的):
Administrator-25/02/2013
Administrator-26/03/2013
Administrator-27/02/2013
xyz-31/01/2013
xyz-31/03/2013
在運行該腳本:
xyz-31/3/2013
Administrator-26/3/2013
非常感謝。現在,我該如何根據字母順序對輸出條目進行排序。 – user2223511 2013-04-29 10:55:55
更新了代碼以獲得排序順序... – Guru 2013-04-29 11:08:11
感謝您的支持。 – user2223511 2013-04-29 13:10:01
[perl程序利用最新登錄的所有用戶]的可能重複(HTTP://計算器。 com/questions/16273185/perl-program-taking-the-latest-login-for-all-users) – dgw 2013-04-29 08:33:37
所以這是一個日誌文件,在這些日誌文件中添加了條目?是否有任何理由懷疑參賽作品沒有按日期排序?換句話說,是否有任何理由最後一次入境不會是最近的? – TLP 2013-04-29 09:48:37
雖然這個問題與被引用作爲可能重複的問題密切相關,但另一個問題是關閉和刪除的,所以它根本不是一個好的「確切重複」。這個問題相當簡單,尤其是當被分析的文件看起來是一個常規的日誌文件時,它將包含給定的最新條目作爲所述用戶的最後一個條目,所以只需要讀取條目並保持最新記錄每個用戶。 – 2013-05-01 04:43:08