I made some changes to the script based upon the excellent feedback I received here.
The script no longer wanders beyond the postscreen log records in order to gather the information needed to determine the postscreen rejection rate. So that removes the problems caused by multiple-recipient messages. There is now the need to tell the script whether deep protocol testing is being done. There's an easy way to do this in the script. The default setting for this is the same as postscreen's default - deep protocol testing is disabled. Also, there is also the ability in the script to adjust the mktemp template according to the OS being used. You can download version 1.2 of the script from here: http://archive.mgm51.com/sources/pslogscan.html Here is the sample output that pslogscan.sh produces (the 158MB file was processed on 4 seconds): Scanning /var/log/maillog CONNECT log records: 116340 PASS NEW log records: 8190 PASS OLD log records: 37002 WHITELISTED log records: 2289 BLACKLISTED log records: 0 rejected: 77049 (66%) Protocol errors: HANGUP log records: 62580 PREGREET log records: 3927 BARE NEWLINE log records: 21 COMMAND TIME LIMIT log records: 168 COMMAND PIPELINING log records: 21 DNS black lists log records: b.barracudacentral.org: 57939 dnsbl.sorbs.net: 28098 zen.spamhaus.org: 66654 DNSBL blocked log records: 50610 DNSBL rank 3: 10353 DNSBL rank 4: 0 DNSBL rank 5: 0 DNSBL rank 6: 19698 DNSBL rank 7: 0 DNSBL rank 8: 0 DNSBL rank 9+: 20559 DNSBL blocks by domain: example.com: 8253 example.net: 1449 example.info: 35679 example.bix: 2268