[news.software.b] C news statistics awk script

pst@anise.acc.com (Paul Traina) (10/04/89)

Here is something I tossed together that works rather well at this site.
I augment it with NNTP statistics,  which generally solves some of the
nagging terseness present in the C news log files.  If in places it seems
a little verbose,  that is due to the fact that I wanted it to know how
to parse 'foo.bar,baz.zork' correctly.

Enjoy or destroy.

# awk file to summarize news activity
# pst@anise.acc.com 10aug89

BEGIN {
	gotjunk = 0
	gotsub = 0
	gotun = 0
}

{ name[$4] = $4 }

$5 == "+" {
	rcvd[$4]++
	for (i = 7; i <= NF; i++) {
	    name[$i] = $i
	    sent[$i]++
	}
}

$5 == "j" {
	gotjunk = 1
	junk[$4]++
	ng = substr(substr($11, 1, length($11) - 1), 2, length($11) - 2)
	split(ng, ngs, ",")
	for (m in ngs)
	    badgroup[ngs[m]]++
}

$5 == "-" {
	if ($7 == "duplicate") {
	    dupd[$4]++
	    next
	}

	if ($7 == "unapproved") {
	    gotun = 1
	    reject[$4]++
	    ng = substr(substr($12, 1, length($12) - 1), 2, length($12) - 2)
	    split(ng, ngs, ",")
	    for (m in ngs)
		unapp[ngs[m]]++
	    next
	}

	if ($8 == "subscribed") {
	    gotsub = 1
	    reject[$4]++
	    ng = substr(substr($11, 1, length($11) - 1), 2, length($11) - 2)
	    split(ng, ngs, ",")
	    for (m in ngs)
		nosub[ngs[m]]++
	    next
	}

	if ($7 == "all" && $8 == "groups") {
	    gotex = 1;
	    excl[$4]++
	    ng = substr(substr($9, 1, length($9) - 1), 2, length($9) - 2)
	    split(ng, ngs, ",")
	    for (m in ngs)
		excluded[ngs[m]]++
	    next
	}

	# some other reason? print the message
	print 
}

END {
    print
    printf "%-14s%6s%6s%6s%6s%6s\n", "System", "Rcvd", "Dup", "Junk", "Sent", "Excl"
    for (i in name)
	printf "%-14s%6d%6d%6d%6d%6d\n", i, rcvd[i], dupd[i], junk[i], sent[i], excl[i]

    if (gotjunk) {
	print
	print "Bad newsgroups received:"
	for (i in badgroup)
	    printf "%-26s%6d\n", i, badgroup[i]
    }

    if (gotsub) {
	print
	print "Newsgroups with no subscription:"
	for (i in nosub)
	    printf "%-26s%6d\n", i, nosub[i]
    }

    if (gotun) {
	print
	print "Unapproved articles:"
	for (i in unapp)
	    printf "%-26s%6d\n", i, unapp[i]
    }

    if (gotex) {
	print
	print "Excluded newsgroups:"
	for (i in excluded)
	    printf "%-26s%6d\n", i, excluded[i]
    }
	   
}
--
Insanity is the exception in individuals.  In groups, parties, people,
and times, it is the rule.
	-- Nietzche