SunOS最后一次wtmp解析

时间:2014-01-02 16:42:20

标签: perl

我有一个perl脚本,我一直用它来解析wtmp文件,将所有用户的时间加在一起,并删除我们错误的数据。这个脚本在我最新/最新的系统上运行得非常好。但是,我有一个较旧的系统,一个运行Solaris 8的Sparc Ultra 3000我相信。这件事在我的屁股上比你知道的更痛苦。所以,我正试图让我的用户从中获取时间,并像这样格式化输出 -

bbarret8 316
cchang5 703
ccomanes 2267
ckeefe 24
cmeyer7 82
dbabbini 140

我正在使用的perl脚本是http://pastebin.com/ayN1yMJU

我的输入看起来像这样(还有更多条目) -

lwoods4   console      :0               Mon Dec 30 14:08 - 14:22  (00:14)
dhesek    console      :0               Mon Dec 30 09:51 - 09:53  (00:01)
lwoods4   console      :0               Sun Dec 29 15:06 - 15:16  (00:09)
dhesek    console      :0               Sun Dec 29 09:26 - 09:30  (00:04)
dhesek    console      :0               Fri Dec 27 16:15 - 16:17  (00:01)
ylin7     console      :0               Fri Dec 27 15:24 - 16:04  (00:40)
lwoods4   console      :0               Fri Dec 27 14:11 - 14:25  (00:13)
lwoods4   console      :0               Fri Dec 27 11:18 - 11:35  (00:17)
dhesek    console      :0               Thu Dec 26 13:21 - 14:38  (01:16)
dhesek    console      :0               Wed Dec 25 14:20 - 14:23  (00:02)
sbrown3   console      :0               Tue Dec 24 14:40 - 14:53  (00:12)
dhesek    console      :0               Tue Dec 24 09:21 - 09:25  (00:04)
sbrown3   console      :0               Mon Dec 23 11:20 - 12:20  (00:59)
ylin7     console      :0               Sun Dec 22 21:44 - 22:00  (00:16)
sbrown3   console      :0               Sat Dec 21 15:05 - 16:18  (01:12)
kwatson2  console      :0               Fri Dec 20 18:41 - 19:03  (00:22)

我的输出 -

# ./Varian.wtmp.last.pl 
0 1
jvail1 19
kwatson2 22
mm 1
nmrext0 21

这是因为脚本在我当前系统上调用'last'命令来解析Solaris系统中的输出文件吗?它们看起来和我的眼睛是一样的,但也许它们不是。 非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

看到两个输出会很有帮助。检查现在是可选的+匹配(解析天数时)。

use strict;
use warnings;

my %TIMES;
while (<DATA>) {
    if (my($name,$days,$hours,$mins) = /^(\w+).+\((?:(\d+)\+?)?(\d+):(\d+)/) {
        #                                 '+' is optional __^ 

        $TIMES{$name} += 1440 * $days + 60 * $hours + $mins;
    }
}
foreach (sort keys %TIMES) {
    print "$_ $TIMES{$_}\n";
}
__DATA__
lwoods4   console      :0               Mon Dec 30 14:08 - 14:22  (00:14)
dhesek    console      :0               Mon Dec 30 09:51 - 09:53  (00:01)
lwoods4   console      :0               Sun Dec 29 15:06 - 15:16  (00:09)
dhesek    console      :0               Sun Dec 29 09:26 - 09:30  (00:04)
dhesek    console      :0               Fri Dec 27 16:15 - 16:17  (00:01)
ylin7     console      :0               Fri Dec 27 15:24 - 16:04  (00:40)
lwoods4   console      :0               Fri Dec 27 14:11 - 14:25  (00:13)
lwoods4   console      :0               Fri Dec 27 11:18 - 11:35  (00:17)
dhesek    console      :0               Thu Dec 26 13:21 - 14:38  (01:16)
dhesek    console      :0               Wed Dec 25 14:20 - 14:23  (00:02)
sbrown3   console      :0               Tue Dec 24 14:40 - 14:53  (00:12)
dhesek    console      :0               Tue Dec 24 09:21 - 09:25  (00:04)
sbrown3   console      :0               Mon Dec 23 11:20 - 12:20  (00:59)
ylin7     console      :0               Sun Dec 22 21:44 - 22:00  (00:16)
sbrown3   console      :0               Sat Dec 21 15:05 - 16:18  (01:12)
kwatson2  console      :0               Fri Dec 20 18:41 - 19:03  (00:22)

输出

dhesek 88
kwatson2 22
lwoods4 53
sbrown3 143
ylin7 56