[comp.unix.questions] Need a shell scrpit!!

koffi@bsu-cs.bsu.edu (There will be enough room in HEAVENS for all of US) (09/07/90)

Hello Cybersapce,

I am looking for a shell script that could do the following task:

	1) Create a file of users (login name followed by the real life name) 
who haven't logged on the system since the year 1988.



Koffi

lwall@jpl-devvax.JPL.NASA.GOV (Larry Wall) (09/07/90)

In article <11722@bsu-cs.bsu.edu> koffi@bsu-cs.bsu.edu (There will be enough room in HEAVENS for all of US) writes:
: I am looking for a shell script that could do the following task:
: 
: 	1) Create a file of users (login name followed by the real life name) 
: who haven't logged on the system since the year 1988.

Mmm.  Since it's cross-posted to comp.lang.perl, I presume a solution in
Perl would be acceptable.  This one works on my machines.  As you can see,
there's a lot of other information that you could print out too.

#!/usr/bin/perl

$lastlog_t = "L a8 a16";		# Your struct lastlog may differ

$LEN = length(pack($lastlog_t, 0, '',''));

open(LASTLOG, "/usr/adm/lastlog");
while (($login, $pass, $uid, $gid, $j, $j, $gcos) = getpwent) {
    seek(LASTLOG, $uid * $LEN, 0);
    read(LASTLOG, $lastlog, $LEN);
    ($time, $line, $host) = unpack($lastlog_t, $lastlog);
    ($sec,$min,$hour,$mday,$mon,$year) = localtime($time);
    if ($year <= 88) {
	($fullname) = split(/,/,$gcos);		# BSDism here
	print "$login	$fullname\n";
    }
}

It can probably also be done on some machines with

finger -s -m `awk -F: '{print $1}' /etc/passwd` | \
sed -n -e '/:..>/d' -e '/1990>/d' -e '/1989>/d' -e '/>/p'

but that takes about 30 seconds on my machine.  The Perl script takes about
2 seconds.

Larry Wall
lwall@jpl-devvax.jpl.nasa.gov