frank@Morgan.COM (Frank Wortner) (01/17/89)
GAWK 2.00 will not run the program in the shar file below. I've enclosed
a short sample data file.
Here is a sample session on a Sun 3/110 running SunOS 4.O.
Script started on Mon Jan 16 14:43:18 1989
hudson% /bin/awk -f syslog_awk SYSLOG
System Xfers Bytes rec Bytes xmt Connect Avg Xf Avg rec Avg xmt
phri 2 12532 0 0:01:01 6266 205 0
TOTALS 2 12532 0 0:01:01
hudson%
hudson%
hudson%
hudson% gawk -f syslog_awk SYSLOG
gawk: syntax error near line 10:
sys_xf[$2] ++;
^ parse error
hudson%
hudson%
hudson%
script done on Mon Jan 16 14:44:12 1989
----------------------------Cut Here-----------------------------------------
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
# syslog_awk
# SYSLOG
# This archive created: Mon Jan 16 14:32:20 1989
export PATH; PATH=/bin:$PATH
echo shar: extracting "'syslog_awk'" '(2728 characters)'
if test -f 'syslog_awk'
then
echo shar: will not over-write existing file "'syslog_awk'"
else
sed 's/^ X//' << \SHAR_EOF > 'syslog_awk'
X# USAGE: awk -f syslog_awk /usr/spool/uucp/SYSLOG
X# An awk script for printing a pretty report of UUCP activities from the
X# UUCP SYSLOG - Erik E. Fair October 2, 1984
X#
X# v7 UUCP
X$4 == "received" {
X sysname[$2] = $2;
X by_rec[$2] += $6;
X sec_rec[$2] += $8;
X sys_xf[$2] ++;
X}
X#
X# 4.2 BSD UUCP
X$5 == "received" {
X sysname[$2] = $2;
X by_rec[$2] += $7;
X sec_rec[$2] += $9;
X sys_xf[$2] ++;
X}
X#
X# System V UUCP
X$6 == "<-" {
X $1 = substr($1, 1, (index($1, "!") - 1));
X sysname[$1] = $1;
X by_rec[$1] += $7;
X sec_rec[$1] += $9;
X sys_xf[$1] ++;
X}
X#
X# v7 UUCP
X$4 == "sent" {
X sysname[$2] = $2;
X by_xmt[$2] += $6;
X sec_xmt[$2] += $8;
X sys_xf[$2] ++;
X}
X#
X# 4.2 BSD UUCP
X$5 == "sent" {
X sysname[$2] = $2;
X by_xmt[$2] += $7;
X sec_xmt[$2] += $9;
X sys_xf[$2] ++;
X}
X#
X# System V UUCP
X$6 == "->" {
X $1 = substr($1, 1, (index($1, "!") - 1));
X sysname[$1] = $1;
X by_xmt[$1] += $7;
X sec_xmt[$1] += $9;
X sys_xf[$1] ++;
X}
XEND {
X#
X# print a report header
X printf("System Xfers Bytes rec Bytes xmt Connect Avg Xf Avg rec Avg xmt\n")
X for(i in sysname) {
X#
X# sort report by most connect time (selection sort)
X first = 0;
X for(j in sysname) {
X if (sys_xf[j] > 0) {
X tmp1 = sec_xmt[j];
X tmp2 = sec_rec[j];
X# Stupid AWK bug - needs a simple expression
X time = (tmp1 + tmp2);
X if (time > first) {
X first = time;
X sys = sysname[j];
X }
X }
X }
X#
X# 4.2 BSD awk seems to have problems. This check should not be necessary.
X# Oddly enough, this problem also shows up in System V. WHY???
X if (sys_xf[sys] != 0) {
X#
X# time for some bean counting
X tmp1 = sec_xmt[sys];
X tmp2 = sec_rec[sys];
X# Stupid AWK bug - needs a simple expression
X time = (tmp1 + tmp2);
X hours = time / 3600;
X sec = time % 3600;
X min = sec / 60;
X sec %= 60;
X tot_xf += sys_xf[sys];
X tot_by_rec += by_rec[sys];
X tot_by_xmt += by_xmt[sys];
X tot_time += time;
X#
X# protect myself against mathematical crime (divide by zero)
X if (sec_rec[sys] == 0)
X sec_rec[sys] = 1;
X if (sec_xmt[sys] == 0)
X sec_xmt[sys] = 1;
X#
X# print a pretty system report (god what an awful printf format...)
X printf("%-8s%8d%11d%11d%4d:%.2d:%.2d%8d%9d%9d\n", \
Xsysname[sys], sys_xf[sys], by_rec[sys], by_xmt[sys], hours, min, sec, \
X((by_rec[sys] + by_xmt[sys]) / sys_xf[sys]), \
X(by_rec[sys] / sec_rec[sys]), \
X(by_xmt[sys] / sec_xmt[sys]));
X#
X# make certain we will not see this system again... (selection sort)
X sys_xf[sys] = 0;
X }
X }
X#
X# calculate time split for total time (and print totals [*shudder*])
X hours = tot_time / 3600;
X sec = tot_time % 3600;
X min = sec / 60;
X sec %= 60;
X printf("\n%-8s%8d%11d%11d%4d:%.2d:%.2d\n", \
X "TOTALS", tot_xf, tot_by_rec, tot_by_xmt, hours, min, sec);
X}
X
SHAR_EOF
if test 2728 -ne "`wc -c < 'syslog_awk'`"
then
echo shar: error transmitting "'syslog_awk'" '(should have been 2728 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'SYSLOG'" '(132 characters)'
if test -f 'SYSLOG'
then
echo shar: will not over-write existing file "'SYSLOG'"
else
sed 's/^ X//' << \SHAR_EOF > 'SYSLOG'
Xuucp phri (9/22-5:19) (590923190) received data 12434 bytes 60 secs
Xuucp phri (9/22-5:19) (590923193) received data 98 bytes 1 secs
SHAR_EOF
if test 132 -ne "`wc -c < 'SYSLOG'`"
then
echo shar: error transmitting "'SYSLOG'" '(should have been 132 characters)'
fi
fi # end of overwriting check
# End of shell archive
exit 0
--
Frank
"Computers are mistake amplifiers."