Вот скрипт Perl, который суммирует содержимое, напечатанное last
. Он основан на примере из книги Запуск Linux , очищен для удобства чтения и исправлен для работы на современном компьютере (формат вывода last's
, похоже, изменился с момента написания оригинала). Сохраните код в файл, и затем вы можете запустить его, передав по нему вывод last
.
#!/usr/bin/perl
# logintime.pl - Summarise amount of time a user is logged in.
# Usage: last | perl logintime.pl
use strict;
use warnings;
my %hours;
my %minutes;
my %logins;
# While we have input...
while ( <> ) {
# Extract the username and login time...
if ( my ($username, $hrs, $mins) = /^(\S+).*\((\d+):(\d+)\)/ ) {
# Increment total hours, minutes, and logins
$hours{$username} += $hrs;
$minutes{$username} += $mins;
$logins{$username}++;
}
}
# For each unique user...
foreach my $user ( sort keys %hours ) {
# Calculate the total hours and minutes...
$hours{$user} += int($minutes{$user} / 60);
$minutes{$user} %= 60;
# Print the information for this user...
print "User $user, total login time ";
printf "%02d:%02d, ", $hours{$user}, $minutes{$user};
print "total logins $logins{$user}.\n";
}