w command w/ whence field
Tom Christiansen
tchrist at convexe.uucp
Mon Dec 18 13:48:36 AEST 1989
here's a script that merges w output with that of who. it's a good
demo of handling pipes and dynamic code generation. here's some
output:
3:51pm up 2 days, 5 mins, 7 users, load average: 2.02, 1.79, 1.55
User tty whence login@ idle JCPU PCPU what
cfarmer ttyd2 2:41pm 39 38 convexs
tchrist ttyp0 concave 3:31pm 40 9 /usr/ucb/w
tweton ttyp1 arrow 1:26pm 21 12 12 rlogin floyd
herod ttyp3 ramses 2:37pm 1:10 5 1 -ksh
tchrist ttyq0 cthulhu 3:48pm 23:24 17 16 monthd -i5
brandon ttyqe oblio 12:47pm 26:04 17 3 mail -f
this and the other two scripts i'm posting now will work with
both perl2 and perl3.
#!/usr/local/bin/perl
$cols = ($ENV{"TERMCAP"} =~ /:co#(\d+):/) ? $1 : 80;
$pipe = "/bin/who|";
open pipe || die "$0: can't open $pipe: $!\n";
while (<pipe>) {
chop; split;
$users{$_[1]} = $_[0];
next unless $#_ > 4;
( $whence = $_[5] ) =~ s/^\((.*)\)$/\1/;
$whence =~ s/(.*):.*/$1/;
$whence =~ s/(................).*/$1/;
$whence{$_[1]} = $whence;
}
$pipe = "/usr/ucb/w|"; open pipe || die "$0: can't open $pipe: $!\n";
$_ = <pipe>; print;
$_ = <pipe>;
s/^(.................).(.*)$/$1whence $2/;
print;
while (<pipe>) {
chop; split;
$whence = ($users{$_[1]} eq $_[0]) ? $whence{$_[1]} : "(new login)";
/(.................).(.*)/;
$line = sprintf ("%s%-10s%s", $1, $whence, $2);
eval '$line =~ s/^(' . ('.' x $cols) . ').*/$1/';
print $line,"\n";
}
Tom Christiansen {uunet,uiucdcs,sun}!convex!tchrist
Convex Computer Corporation tchrist at convex.COM
"EMACS belongs in <sys/errno.h>: Editor too big!"
More information about the Alt.sources
mailing list