postfix log简要整理

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

#!/bin/bash

#-------------------------------------------------------
#TITLE:		Postfix Mail Log Handle
#AUTHOR:	HankZhou
#TIME:		2013/07/17
#VERSION:	0.5V
#-------------------------------------------------------

#To determine whether a file exists
if [ ! -e $1 ]
then 
  printf "$1 No such file or directory\n\r"
  exit 0
fi

dirName="maillog"$(date +%y%m%d%H%M%S)

#To determine whether a directory exists
if [  -d $dirName ]
then
    printf "Folder already exists\n\r"
    exit 0
fi

mkdir $dirName

#Sented File handling
cat $1 | \
awk '{if(match($12,/^status=sent$/)) 
    {mat=match($7,/[a-zA-Z0-9\_]+\@[a-zA-Z0-9\_\.]/); 
    lenMatch=length($7); 
    matched=substr($7,5,lenMatch-6); 
    timeOri=$1" "$2" "$3; 
    cmd="date \""timeOri"\" \"+%Y/%m/%d %T \""; 
    cmd|getline time;
    lenTime=length(time); 
    timeH=substr(time,0,lenTime-1); 
    print timeH","matched ",Message accepted"}}' | \
awk 'BEGIN{FS=OFS=","} 
    {a[$2]++;a[$0]++; 
    if(a[$2]<2) 
        {print $0}}' \
>./$dirName/sented.csv

#calculate number of lines
lines=$(awk '{b++;}END{print b}' ./$dirName/sented.csv)
printf "**\n\rSented mail has been generated.\n\r"
printf "Totle of $lines lines\n\r"

#Error File handling
cat $1 | \
awk '{if(match($12,/^status=(deferred|bounced|expired)$/)) 
    {mat=match($7,/[a-zA-Z0-9\_]+\@[a-zA-Z0-9\_\.]/); 
    lenMatch=length($7); 
    matched=substr($7,5,lenMatch-6); 
    timeOri=$1" "$2" "$3; 
    cmd="date -d \""timeOri"\" \"+%Y/%m/%d %T \""; 
    cmd|getline time; 
    lenTime=length(time); 
    timeH=substr(time,0,lenTime-1); 
    printf timeH","matched",";
    printf substr($12,8);
    for (i=13;i<=NF;i++){printf $i" "};
    print "\n";}}' | \
awk 'BEGIN{FS=OFS=","} 
    {a[$2]++;a[$0]++; 
    if(a[$2]<2) 
        {print $0}}' \
>./$dirName/ErrorMail.csv


lines=$(awk '{b++;}END{print b}' ./$dirName/ErrorMail.csv)
printf "**\n\rError mail  has been generated.\n\r"
printf "Totle of $lines lines\n\r"