#!/usr/bin/gawk -f # function progname() { return "last-filter" } function progvers() { return "2006-09-22a" } function proghome() { return "" } #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # last-filter # ```````````` # awk program to filter and format output from the 'last -adx' command to # display user login date/time, and system reboot/shutdown information # # Copyright (C) 2006 Grant Coady GPLv2 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # usage # `````` # Note: `tac` is used to get ascending date order # # examples # ````````` # ~$ last -adx| tac| last-filter # # ~$ last -adx| tac| grep "Aug 2"| last-filter # # ~$ last -adx| tac| datestamp-filter -v hours=12 datecolm=44| last-filter # #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # option description default # ------------ ---------------------------------------------- -------- # -v verbose=1 print version 0 # # reference: # http://www.gnu.org/software/gawk/manual/ #### setup 'last -x' parser ################################################### BEGIN { if (verbose) printf "\n%s %s %s\n\n", progname(), progvers(), proghome() datecolm = 27 # start of date / time info # first column label, keep them the same size system_event = "- - -" login_user = "login" login_ftp = "-ftp-" outformat = "%-9s %-16s %s\n" # set output display format } #### run 'last -x' parser ##################################################### /^$/ { next } # ignore blank lines { user = $1; f2 = $2; f3 = $3 } user ~ /wtmp/ { next } # ignore wtmp { datetime = substr($0, datecolm) } # grab record's date / time info user ~ /runlevel/ { next } # ignore runlevel pseudo-user # handle reboot and shutdown pseudo-users user ~ /reboot|shutdown/ { printf outformat, system_event, $2 " " $3, datetime next } # handle ftp login user ~ /ftp/ { printf outformat, login_ftp, $3, datetime next } # default { printf outformat, login_user, $1, datetime } # end