#!/usr/bin/awk -f ################################################################ # # Program Name : xusers # Date Created : 02-27-97 # Author : Dan A. Mercer # Email : damercer@mmm.com # : # Description : Print list of users and applications signed on # : X workstations ################################################################ # standard help message function help(hlpmsg) { basename = ARGV[0] sub(/.*\//,"",basename) printf "Format: %s [o=[hi]] [s=cdlp] [pattern]\n", basename print "Print list of users and applications signed on X workstations" print "NOTE: applicationname is truncated to 9 chars" print "Arguments:" print " o=[h|i] - Options" print " h - help - print this message" print " i - case insensitive pattern search" print " s=[c|d|l|p] - Sort Options" print " c - sort by command" print " d - sort by display name" print " l - sort by login name" print " p - sort by pid" print " pattern - regex pattern to search commands against" if (length(hlpmsg)) print hlpmsg exit } BEGIN { # process command line for (i=1;i 0) { type = substr(field,1,1) sub("^.","",field) if ("p" == type) { # always output first pid = field PID[pid] = ++ct } else if ("c" == type) { # always output second XAPPL[pid] = field } else if ("L" == type) { # always output fourth USER[pid] = field } else if ("n" == type) { # may be multiple instances - we just use the last gsub(".*->|:6000","",field) DPY[pid] = field } } close(cmd) printf "%8s %5s %-9s %s\n","USER","PID","COMMAND","DISPLAY" for (pid in PID) { if (((igncase) ? tolower(XAPPL[pid]) : XAPPL[pid]) ~ pattern) printf "%8s %5d %-9s %s\n", USER[pid],pid,XAPPL[pid],DPY[pid] | sort } close(sort) exit }