话单比对统一解决方案(基于Shell)
2009-03-13 23:38
316 查看
在外实习,除了工作,自己还可以做一些感兴趣的事情,这段时间一致在做话单比对的工作,最近又在数据中心的比对,哎呀除了核对还是核对,真是单调!
为什么了不做一个全自动的核对机了,就像全自动的洗衣机你把洗衣粉放好了,水龙头打开,设定一个模式,他自己就会洗、漂、脱一体服务。
嘿嘿,我这两天断断续续做的这个解决方案就是基于这个想法哦,是不是很帅哦....
##################### Uniform Solution for Bill Comparison ################################
##################### Date: 2009-3-6 #####################################################
##################### Author: landry yi ##################################################
##################### Email: yijiyong100@163.com #########################################
##################### Copyright: Harbin Normal University@copyright2009 ###################
##################### Version: 1.0.0#######################################################
##################### Histroy: if modified ,please add here and release new veresion#######
############## Config Part ################################################################
SystemBak="/transfer/yijy/cmp_shell/bak"
SystemTmp="/transfer/yijy/cmp_shell/tmp"
SystemLog="/transfer/yijy/cmp_shell/log"
SystemErr="/transfer/yijy/cmp_shell/err"
NewDataSourceDir="/transfer/yijy/cmp_shell/bin/vtof/bak"
NewDataSourceExp="*20090101*"
OldDataSourceDir="/transfer/yijy/cmp_shell/bin/vtof/bak"
OldDataSourceExp="*20090101*"
NewConvertFlag="on"
NewConvertBinDir="/transfer/yijy/cmp_shell/bin/vtof/new/vtof1"
NewConvertBinCfg="/transfer/yijy/cmp_shell/bin/vtof/cfg/new/vtof.cfg"
NewConvertBinIn="/transfer/yijy/cmp_shell/bin/vtof/new/in"
NewConvertBinOut="/transfer/yijy/cmp_shell/bin/vtof/new/out"
NewConvertSplit="|"
OldConvertFlag="on"
OldConvertBinDir="/transfer/yijy/cmp_shell/bin/vtof/old/vtof1"
OldConvertBinCfg="/transfer/yijy/cmp_shell/bin/vtof/cfg/old/vtof.cfg"
OldConvertBinIn="/transfer/yijy/cmp_shell/bin/vtof/old/in"
OldConvertBinOut="/transfer/yijy/cmp_shell/bin/vtof/old/out"
OldConvertSplit="|"
NewCmpExtractFlag="on"
NewCmpExtractKey="1,3,6,8,10"
NewCmpExtractSem="msisdn:2,chat_type:11,fee_type:16,fee1:14,old_fee1:2"
OldCmpExtractFlag="on"
OldCmpExtractKey="1,3,6,8,10"
OldCmpExtractSem="msisdn:2,chat_type:11,fee_type:16,fee1:14,old_fee1:2"
NewCmpFilePrex="new."
OldCmpFilePrex="old."
CmpFileNewIn="/transfer/yijy/cmp_shell/cmp/new/new_in"
CmpFileOldIn="/transfer/yijy/cmp_shell/cmp/new/old_in"
CmpBinDir="/transfer/yijy/cmp_shell/cmp/bin/o2n_cmp"
CmpBinCfg="/transfer/yijy/cmp_shell/cmp/cfg/wa.cfg"
CheckFile()
{
if [ ! -d ${SystemBak} -o ! -d ${SystemTmp} -o ! -d ${CmpFileNewIn} -o ! -d ${CmpFileOldIn} ]
then
echo 'APP:ERROR:Config error -- DIR'
exit
fi
if [ ! -d ${SystemLog} -o ! -d ${SystemErr} ]
then
echo 'APP:ERROR:Config error -- System Dir'
exit
fi
if [ ! -d ${NewConvertBinIn} -o ! -d ${NewConvertBinOut} -o ! -d ${OldConvertBinIn} -o ! -d ${OldConvertBinOut} ]
then
echo 'APP:ERROR:Convert error -- DIR'
exit
fi
if [ ! -f $CmpBinDir -o ! -f $CmpBinCfg ]
then
echo 'APP:ERROR:Config error -- FILE'
exit
fi
if [ ! -d $NewDataSourceDir -o ! -d $OldDataSourceDir ]
then
echo 'APP:ERROR:Config error -- Datasource'
exit
fi
if [ ! ${NewConvertSplit} -o ! ${OldConvertSplit} ]
then
echo 'APP:ERROR:Config error -- ConvertSplitchar can not be NULL'
exit
fi
if [ ! $NewDataSourceExp -o ! $OldDataSourceExp ]
then
echo 'APP:ERROR:Config error -- DataSourceExp can not be NULL'
exit
fi
if [ $NewConvertFlag = "on" ]
then
if [ ! -d ${NewConvertBinIn} -o ! -d ${NewConvertBinOut} -o ! -f ${NewConvertBinDir} -o ! -f ${NewConvertBinCfg} ]
then
echo 'APP:ERROR:Config error -- NewConvert'
exit
fi
fi
if [ $OldConvertFlag = "on" ]
then
if [ ! -d ${OldConvertBinIn} -o ! -d ${OldConvertBinOut} -o ! -f ${OldConvertBinDir} -o ! -f ${OldConvertBinCfg} ]
then
echo 'APP:ERROR:Config error -- OldConvert'
exit
fi
fi
if [ ! $NewCmpFilePrex -o ! $OldCmpFilePrex ]
then
echo 'APP:ERROR:Config error -- prex'
exit
fi
if [ -n ${NewCmpExtractKey} -a -n ${NewCmpExtractSem} -a -n ${OldCmpExtractKey} -a -n ${OldCmpExtractSem} ]
then
echo ${NewCmpExtractKey} | awk -F ',' '{
printf("APP:MSG:NewExkey number is [%d] -- and the New key are [%s]\n",NF,$0);
}'
echo ${NewCmpExtractSem} | awk -F ',' '{
NewExsemNum=NF
printf("APP:MSG:NewExsem number is [%d] -- and the New sem are [%s]\n",NF,$0);
}'
echo ${OldCmpExtractKey} | awk -F ',' '{
OldExkeyNum=NF
printf("APP:MSG:OldExkey number is [%d] -- and the Old key are [%s]\n",NF,$0);
}'
echo ${OldCmpExtractSem} | awk -F ',' '{
OldExsemNum=NF
printf("APP:MSG:OldExsem number is [%d] -- and the Old sem are [%s]\n",NF,$0);
}'
newExtractKeyNumber=`echo ${NewCmpExtractKey} | awk -F ',' '{printf("%d",NF)}'`
newExtractSemNumber=`echo ${NewCmpExtractSem} | awk -F ',' '{printf("%d",NF)}'`
if [ ${newExtractKeyNumber} -ne ${newExtractSemNumber} ]
then
echo 'APP:ERROR:The new extract key number not equal to sem number'
exit
fi
oldExtractKeyNumber=`echo ${OldCmpExtractKey} | awk -F ',' '{printf("%d",NF)}'`
oldExtractSemNumber=`echo ${OldCmpExtractSem} | awk -F ',' '{printf("%d",NF)}'`
if [ ${oldExtractKeyNumber} -ne ${oldExtractSemNumber} ]
then
echo 'APP:ERROR:The old extract key number not equal to sem number'
exit
fi
else
echo 'APP:ERROR:Config error -- Extract'
exit
fi
echo 'APP:MSG:Config part check successful!'
}
############## Clean Enviroment ###########################################################
CleanEnviroment()
{
echo 'APP:MSG:Start clean the system enviroment...'
########### <--add your own script here to clean the enviroment if you like--> ##########
########### <--add your own script here to clean the enviroment if you like--> ##########
echo 'APP:MSG:Clean the system enviroment over...'
}
############## Data Prepare ###############################################################
totalNewConvertIn=0
totalOldConvertIn=0
totalNewExtractIn=0
totalOldExtractIn=0
DataPrepare()
{
if [ ! -d ${NewDataSourceDir} -o ! -d ${OldDataSourceDir} ]
then
echo 'APP:ERROR:Data source error'
exit
fi
echo 'APP:MSG:Data start prepare...'
if [ ${NewConvertFlag} = "on" ]
then
cp -r ${NewDataSourceDir}/${NewDataSourceExp} ${NewConvertBinIn}
let totalNewConvertIn=`ls -1 ${NewConvertBinIn} | wc -l`
echo 'APP:MSG:The total number of new file need convert in ['${NewConvertBinIn}'] is ['${totalNewConvertIn}']'
else
cp -r ${NewDataSourceDir}/${NewDataSourceExp} ${NewConvertBinOut}
let totalNewExtractIn=`ls -1 ${NewConvertBinOut} | wc -l`
echo 'APP:MSG:The total number of new file need extract in ['${NewConvertBinOut}'] is ['${totalNewExtractIn}']'
fi
if [ ${OldConvertFlag} = "on" ]
then
cp -r ${OldDataSourceDir}/${OldDataSourceExp} ${OldConvertBinIn}
let totalOldConvertIn=`ls -1 ${OldConvertBinIn} | wc -l`
echo 'APP:MSG:The total number of new file need convert in ['${OldConvertBinIn}'] is ['${totalOldConvertIn}']'
else
cp -r ${OldDataSourceDir}/${OldDataSourceExp} ${OldConvertBinOut}
let totalOldExtractIn=`ls -1 ${OldConvertBinOut} | wc -l`
echo 'APP:MSG:The total number of new file need extract in ['${OldConvertBinOut}'] is ['${totalOldExtractIn}']'
fi
echo 'APP:MSG:Data prepare over...'
}
############## Convert Part ###############################################################
ConvertFile()
{
if [ ${NewConvertFlag} = "on" ]
then
if [ 0 -eq `ls -1 ${NewConvertBinIn} | wc -l` ]
then
echo 'APP:MSG:No file exist in '${NewConvertBinIn}
exit
else
let totalNewConvertIn=`ls -1 ${NewConvertBinIn} | wc -l`
newCurPercent=0
newTmpPercent=0
echo 'APP:MSG:Start convert new file:'
echo 'APP:MSG:The total file number in the ['${NewConvertBinIn}'] is ['${totalNewConvertIn}']'
echo 'APP:MSG:\c'
nohup ${NewConvertBinDir} ${NewConvertBinCfg} &
sleep 1
echo 'APP:MSG:Process Bar:____________________________________________50%_________________________________________________100%'
echo 'APP:MSG:Convert Pro:\c'
while [ 0 -lt `ls -1 ${NewConvertBinIn} | wc -l` ]
do
newExtCurFile=`ls -1 ${NewConvertBinIn} | wc -l`
let NewDValue=totalNewConvertIn-newExtCurFile
let newCurPercent=${NewDValue}\*100/${totalNewConvertIn}
while [ ${newTmpPercent} -lt ${newCurPercent} ]
do
echo '#\c'
let newTmpPercent=newTmpPercent+1
done
done
while [ $newTmpPercent -lt 100 ]
do
echo '#\c'
let newTmpPercent=newTmpPercent+1
done
newConvertId=`ps -ef | grep ${NewConvertBinDir} | grep ${NewConvertBinCfg} | awk '{printf("%s",$2);}'`
echo '\nAPP:MSG:New convert program id is ['${newConvertId}']'
kill ${newConvertId}
echo 'APP:MSG:New convert program was killed!'
echo 'APP:MSG:New file Convert over!'
fi
fi
if [ ${OldConvertFlag} = "on" ]
then
if [ 0 -eq `ls -1 ${OldConvertBinIn} | wc -l` ]
then
echo 'APP:MSG:No file exist in '${OldConvertBinIn}
exit
else
let totalOldConvertIn=`ls -1 ${OldConvertBinIn} | wc -l`
oldCurPercent=0
oldTmpPercent=0
echo 'APP:MSG:Start convert old file:'
echo 'APP:MSG:The total file number in the ['${OldConvertBinIn}'] is ['${totalOldConvertIn}']'
echo 'APP:MSG:\c'
nohup ${OldConvertBinDir} ${OldConvertBinCfg} &
sleep 1
echo 'APP:MSG:Process Bar:____________________________________________50%_________________________________________________100%'
echo 'APP:MSG:Convert Pro:\c'
while [ 0 -lt `ls -1 ${OldConvertBinIn} | wc -l` ]
do
oldExtCurFile=`ls -1 ${OldConvertBinIn} | wc -l`
let OldDValue=totalOldConvertIn-oldExtCurFile
let oldCurPercent=${OldDValue}\*100/${totalOldConvertIn}
while [ ${oldTmpPercent} -lt ${oldCurPercent} ]
do
echo '#\c'
let oldTmpPercent=oldTmpPercent+1
done
done
while [ $oldTmpPercent -lt 100 ]
do
echo '#\c'
let oldTmpPercent=oldTmpPercent+1
done
oldConvertId=`ps -ef | grep ${OldConvertBinDir} | grep ${OldConvertBinCfg} | awk '{printf("%s",$2);}'`
echo '\nAPP:MSG:Old convert program id is ['${oldConvertId}']'
kill ${oldConvertId}
echo 'APP:MSG:Old convert program was killed!'
echo 'APP:MSG:Old file Convert over!'
fi
fi
}
############## Extract Part ###############################################################
ExtractFile()
{
if [ ${NewCmpExtractFlag} = "on" ]
then
if [ 0 -eq `find ${NewConvertBinOut} -type f | wc -l` ]
then
echo 'APP:MSG:No file exist in '${NewConvertBinOut}
else
echo 'APP:MSG:Start Extract new file,and copy the extract file to compare program in dir,then move it to SystemBak dir'
let totalNewExtractIn=`ls -1 ${NewConvertBinOut} | wc -l`
echo 'APP:MSG:The total file in ['${NewConvertBinOut}'] is ['${totalNewExtractIn}']'
BakDate=`date +%Y%m%d`
if [ ! -d ${SystemBak}/${BakDate} ]
then
mkdir ${SystemBak}/${BakDate}
fi
if [ 0 -lt `find ${NewConvertBinOut} -type f | wc -l` ]
then
echo 'APP:MSG:Process Bar:____________________________________________50%_________________________________________________100%'
echo 'APP:MSG:Extract Pro:\c'
newExtractTmpPercent=0
newExtractCurPercent=0
newExtractTotal=0
find ${NewConvertBinOut} -type f | while read newConvertFile
do
newConvertTmp=`basename ${newConvertFile}`
newExtractTmpFile=`echo ${NewCmpFilePrex}${newConvertTmp}`
cat ${newConvertFile} | awk -F ${NewConvertSplit} '{
newExStr=""
newExKeyStr="'$NewCmpExtractKey'"
newExSemStr="'$NewCmpExtractSem'"
while(length(newExKeyStr) || length(newExSemStr))
{
newKeyTmpCur=index(newExKeyStr,",")
newSemTmpCur=index(newExSemStr,",")
if (newKeyTmpCur == 0)
{
newKeyTmpCur=length(newExKeyStr)+1;
}
if (newSemTmpCur == 0)
{
newSemTmpCur=length(newExSemStr)+1;
}
newSemTmp=substr(newExSemStr,1,newSemTmpCur-1)
newSemTmpIndex=index(newSemTmp,":")
newSemTmpLen=substr(newSemTmp,newSemTmpIndex+1)
newKeyTmp=substr(newExKeyStr,1,newKeyTmpCur-1)
newExStrTmp=$newKeyTmp
newExStrFormat=formatStr(newExStrTmp,newSemTmpLen)
if (newExStr == "")
{
newExStr=newExStrFormat;
}
else
{
newExStr=sprintf("%s %s",newExStr,newExStrFormat)
}
if(index(newExKeyStr,",") == 0)
{
newExKeyStr=""
}
newExKeyStr=substr(newExKeyStr,newKeyTmpCur+1)
if(index(newExSemStr,",") == 0)
{
newExSemStr=""
}
newExSemStr=substr(newExSemStr,newSemTmpCur+1)
}
printf("%s\n",newExStr);
}
function formatStr (str,len)
{
formatstr=""
strLen=length(str)
sprintf("len %d,strlen%d",len,strLen)
if(strLen>len)
{
formatstr=substr(str,1,len);
}
else
{
formatstr=str
dValue=len-strLen
while(dValue)
{
formatstr=sprintf("%s ",formatstr)
dValue--
}
}
return formatstr
}
'>${SystemTmp}/${newExtractTmpFile}
let newExtractTotal=newExtractTotal+1
let newExtractCurPercent=${newExtractTotal}\*100/${totalNewExtractIn}
while [ ${newExtractTmpPercent} -lt ${newExtractCurPercent} ]
do
echo '#\c'
let newExtractTmpPercent=newExtractTmpPercent+1
done
cp ${SystemTmp}/${newExtractTmpFile} ${CmpFileNewIn}
mv ${SystemTmp}/${newExtractTmpFile} ${SystemBak}/${BakDate}
done
fi
echo '\nAPP:MSG:Extract new file over,copy and move the file sucessfully!'
fi
fi
if [ ${OldCmpExtractFlag} = "on" ]
then
if [ 0 -eq `find ${OldConvertBinOut} -type f | wc -l` ]
then
echo 'APP:MSG:No file exist in '${OldConvertBinOut}
else
echo 'APP:MSG:Start Extract old file,and copy the extract file to compare program in dir,then move it to SystemBak dir'
let totalOldExtractIn=`ls -1 ${OldConvertBinOut} | wc -l`
echo 'APP:MSG:The total file in ['${OldConvertBinOut}'] is ['${totalOldExtractIn}']'
BakDate=`date +%Y%m%d`
if [ ! -d ${SystemBak}/${BakDate} ]
then
mkdir ${SystemBak}/${BakDate}
fi
if [ 0 -lt `find ${OldConvertBinOut} -type f | wc -l` ]
then
echo 'APP:MSG:Process Bar:____________________________________________50%_________________________________________________100%'
echo 'APP:MSG:Extract Pro:\c'
oldExtractTmpPercent=0
oldExtractCurPercent=0
oldExtractTotal=0
find ${OldConvertBinOut} -type f | while read oldConvertFile
do
oldConvertTmp=`basename ${oldConvertFile}`
oldExtractTmpFile=`echo ${OldCmpFilePrex}${oldConvertTmp}`
cat ${oldConvertFile} | awk -F ${OldConvertSplit} '{
oldExStr=""
oldExKeyStr="'$OldCmpExtractKey'"
oldExSemStr="'$OldCmpExtractSem'"
while(length(oldExKeyStr) || length(oldExSemStr))
{
oldKeyTmpCur=index(oldExKeyStr,",")
oldSemTmpCur=index(oldExSemStr,",")
if (oldKeyTmpCur == 0)
{
oldKeyTmpCur=length(oldExKeyStr)+1;
}
if (oldSemTmpCur == 0)
{
oldSemTmpCur=length(oldExSemStr)+1;
}
oldSemTmp=substr(oldExSemStr,1,oldSemTmpCur-1)
oldSemTmpIndex=index(oldSemTmp,":")
oldSemTmpLen=substr(oldSemTmp,oldSemTmpIndex+1)
oldKeyTmp=substr(oldExKeyStr,1,oldKeyTmpCur-1)
oldExStrTmp=$oldKeyTmp
oldExStrFormat=formatStr(oldExStrTmp,oldSemTmpLen)
if (oldExStr == "")
{
oldExStr=oldExStrFormat;
}
else
{
oldExStr=sprintf("%s %s",oldExStr,oldExStrFormat)
}
if(index(oldExKeyStr,",") == 0)
{
oldExKeyStr=""
}
oldExKeyStr=substr(oldExKeyStr,oldKeyTmpCur+1)
if(index(oldExSemStr,",") == 0)
{
oldExSemStr=""
}
oldExSemStr=substr(oldExSemStr,oldSemTmpCur+1)
}
printf("%s\n",oldExStr);
}
function formatStr (str,len)
{
formatstr=""
strLen=length(str)
sprintf("len %d,strlen%d",len,strLen)
if(strLen>len)
{
formatstr=substr(str,1,len);
}
else
{
formatstr=str
dValue=len-strLen
while(dValue)
{
formatstr=sprintf("%s ",formatstr)
dValue--
}
}
return formatstr
}
'>${SystemTmp}/${oldExtractTmpFile}
let oldExtractTotal=oldExtractTotal+1
let oldExtractCurPercent=${oldExtractTotal}\*100/${totalOldExtractIn}
while [ ${oldExtractTmpPercent} -lt ${oldExtractCurPercent} ]
do
echo '#\c'
let oldExtractTmpPercent=oldExtractTmpPercent+1
done
cp ${SystemTmp}/${oldExtractTmpFile} ${CmpFileOldIn}
mv ${SystemTmp}/${oldExtractTmpFile} ${SystemBak}/${BakDate}
done
fi
echo '\nAPP:MSG:Extract old file over,copy and move the file sucessfully!'
fi
fi
}
############## Compare Part ###############################################################
CompareFile()
{
if [ 0 -eq `find ${CmpFileNewIn} -type f | wc -l` ]
then
echo 'APP:MSG:There is no file exist in ['${CmpFileNewIn}']'
exit
fi
if [ 0 -eq `find ${CmpFileOldIn} -type f | wc -l` ]
then
echo 'APP:MSG:There is no file exist in ['${CmpFileOldIn}']'
exit
fi
echo 'APP:MSG:Start comprae file...'
totalCmpNewFileIn=`ls -1 ${CmpFileNewIn} | wc -l`
totalCmpOldFileIn=`ls -1 ${CmpFileOldIn} | wc -l`
echo 'APP:MSG:The total number of file in ['${CmpFileNewIn}'] is ['${totalCmpNewFileIn}']'
echo 'APP:MSG:The total number of file in ['${CmpFileOldIn}'] is ['${totalCmpOldFileIn}']'
cmpCurPercent=0
cmpTmpPercent=0
echo 'APP:MSG:\c'
nohup ${CmpBinDir} ${CmpBinCfg} &
sleep 1
echo 'APP:MSG:Process Bar:____________________________________________50%_________________________________________________100%'
echo 'APP:MSG:Compare Pro:\c'
while [ 0 -lt `ls -1 ${CmpFileNewIn} | wc -l` ]
do
totalCurCmpFileIn=`ls -1 ${CmpFileNewIn} | wc -l`
let fileDvalue=totalCmpNewFileIn-totalCurCmpFileIn
let cmpCurPercent=${fileDvalue}\*100/${totalCmpNewFileIn}
while [ ${cmpTmpPercent} -lt ${cmpCurPercent} ]
do
echo '#\c'
let cmpTmpPercent=cmpTmpPercent+1
done
done
while [ ${cmpTmpPercent} -lt 100 ]
do
echo '#\c'
let cmpTmpPercent=cmpTmpPercent+1
done
sleep 5
theCompareId=`ps -ef | grep ${CmpBinDir} | grep ${CmpBinCfg} | awk '{printf("%s",$2);}'`
if [ -n "$theCompareId" ]
then
kill $theCompareId
fi
echo '\nAPP:MSG:Compare Result:'
tail nohup.out
echo 'APP:MSG:Compare file over...'
}
############## Main Program ###############################################################
CheckFile
#CleanEnviroment
DataPrepare
ConvertFile
ExtractFile
CompareFile
为什么了不做一个全自动的核对机了,就像全自动的洗衣机你把洗衣粉放好了,水龙头打开,设定一个模式,他自己就会洗、漂、脱一体服务。
嘿嘿,我这两天断断续续做的这个解决方案就是基于这个想法哦,是不是很帅哦....
##################### Uniform Solution for Bill Comparison ################################
##################### Date: 2009-3-6 #####################################################
##################### Author: landry yi ##################################################
##################### Email: yijiyong100@163.com #########################################
##################### Copyright: Harbin Normal University@copyright2009 ###################
##################### Version: 1.0.0#######################################################
##################### Histroy: if modified ,please add here and release new veresion#######
############## Config Part ################################################################
SystemBak="/transfer/yijy/cmp_shell/bak"
SystemTmp="/transfer/yijy/cmp_shell/tmp"
SystemLog="/transfer/yijy/cmp_shell/log"
SystemErr="/transfer/yijy/cmp_shell/err"
NewDataSourceDir="/transfer/yijy/cmp_shell/bin/vtof/bak"
NewDataSourceExp="*20090101*"
OldDataSourceDir="/transfer/yijy/cmp_shell/bin/vtof/bak"
OldDataSourceExp="*20090101*"
NewConvertFlag="on"
NewConvertBinDir="/transfer/yijy/cmp_shell/bin/vtof/new/vtof1"
NewConvertBinCfg="/transfer/yijy/cmp_shell/bin/vtof/cfg/new/vtof.cfg"
NewConvertBinIn="/transfer/yijy/cmp_shell/bin/vtof/new/in"
NewConvertBinOut="/transfer/yijy/cmp_shell/bin/vtof/new/out"
NewConvertSplit="|"
OldConvertFlag="on"
OldConvertBinDir="/transfer/yijy/cmp_shell/bin/vtof/old/vtof1"
OldConvertBinCfg="/transfer/yijy/cmp_shell/bin/vtof/cfg/old/vtof.cfg"
OldConvertBinIn="/transfer/yijy/cmp_shell/bin/vtof/old/in"
OldConvertBinOut="/transfer/yijy/cmp_shell/bin/vtof/old/out"
OldConvertSplit="|"
NewCmpExtractFlag="on"
NewCmpExtractKey="1,3,6,8,10"
NewCmpExtractSem="msisdn:2,chat_type:11,fee_type:16,fee1:14,old_fee1:2"
OldCmpExtractFlag="on"
OldCmpExtractKey="1,3,6,8,10"
OldCmpExtractSem="msisdn:2,chat_type:11,fee_type:16,fee1:14,old_fee1:2"
NewCmpFilePrex="new."
OldCmpFilePrex="old."
CmpFileNewIn="/transfer/yijy/cmp_shell/cmp/new/new_in"
CmpFileOldIn="/transfer/yijy/cmp_shell/cmp/new/old_in"
CmpBinDir="/transfer/yijy/cmp_shell/cmp/bin/o2n_cmp"
CmpBinCfg="/transfer/yijy/cmp_shell/cmp/cfg/wa.cfg"
CheckFile()
{
if [ ! -d ${SystemBak} -o ! -d ${SystemTmp} -o ! -d ${CmpFileNewIn} -o ! -d ${CmpFileOldIn} ]
then
echo 'APP:ERROR:Config error -- DIR'
exit
fi
if [ ! -d ${SystemLog} -o ! -d ${SystemErr} ]
then
echo 'APP:ERROR:Config error -- System Dir'
exit
fi
if [ ! -d ${NewConvertBinIn} -o ! -d ${NewConvertBinOut} -o ! -d ${OldConvertBinIn} -o ! -d ${OldConvertBinOut} ]
then
echo 'APP:ERROR:Convert error -- DIR'
exit
fi
if [ ! -f $CmpBinDir -o ! -f $CmpBinCfg ]
then
echo 'APP:ERROR:Config error -- FILE'
exit
fi
if [ ! -d $NewDataSourceDir -o ! -d $OldDataSourceDir ]
then
echo 'APP:ERROR:Config error -- Datasource'
exit
fi
if [ ! ${NewConvertSplit} -o ! ${OldConvertSplit} ]
then
echo 'APP:ERROR:Config error -- ConvertSplitchar can not be NULL'
exit
fi
if [ ! $NewDataSourceExp -o ! $OldDataSourceExp ]
then
echo 'APP:ERROR:Config error -- DataSourceExp can not be NULL'
exit
fi
if [ $NewConvertFlag = "on" ]
then
if [ ! -d ${NewConvertBinIn} -o ! -d ${NewConvertBinOut} -o ! -f ${NewConvertBinDir} -o ! -f ${NewConvertBinCfg} ]
then
echo 'APP:ERROR:Config error -- NewConvert'
exit
fi
fi
if [ $OldConvertFlag = "on" ]
then
if [ ! -d ${OldConvertBinIn} -o ! -d ${OldConvertBinOut} -o ! -f ${OldConvertBinDir} -o ! -f ${OldConvertBinCfg} ]
then
echo 'APP:ERROR:Config error -- OldConvert'
exit
fi
fi
if [ ! $NewCmpFilePrex -o ! $OldCmpFilePrex ]
then
echo 'APP:ERROR:Config error -- prex'
exit
fi
if [ -n ${NewCmpExtractKey} -a -n ${NewCmpExtractSem} -a -n ${OldCmpExtractKey} -a -n ${OldCmpExtractSem} ]
then
echo ${NewCmpExtractKey} | awk -F ',' '{
printf("APP:MSG:NewExkey number is [%d] -- and the New key are [%s]\n",NF,$0);
}'
echo ${NewCmpExtractSem} | awk -F ',' '{
NewExsemNum=NF
printf("APP:MSG:NewExsem number is [%d] -- and the New sem are [%s]\n",NF,$0);
}'
echo ${OldCmpExtractKey} | awk -F ',' '{
OldExkeyNum=NF
printf("APP:MSG:OldExkey number is [%d] -- and the Old key are [%s]\n",NF,$0);
}'
echo ${OldCmpExtractSem} | awk -F ',' '{
OldExsemNum=NF
printf("APP:MSG:OldExsem number is [%d] -- and the Old sem are [%s]\n",NF,$0);
}'
newExtractKeyNumber=`echo ${NewCmpExtractKey} | awk -F ',' '{printf("%d",NF)}'`
newExtractSemNumber=`echo ${NewCmpExtractSem} | awk -F ',' '{printf("%d",NF)}'`
if [ ${newExtractKeyNumber} -ne ${newExtractSemNumber} ]
then
echo 'APP:ERROR:The new extract key number not equal to sem number'
exit
fi
oldExtractKeyNumber=`echo ${OldCmpExtractKey} | awk -F ',' '{printf("%d",NF)}'`
oldExtractSemNumber=`echo ${OldCmpExtractSem} | awk -F ',' '{printf("%d",NF)}'`
if [ ${oldExtractKeyNumber} -ne ${oldExtractSemNumber} ]
then
echo 'APP:ERROR:The old extract key number not equal to sem number'
exit
fi
else
echo 'APP:ERROR:Config error -- Extract'
exit
fi
echo 'APP:MSG:Config part check successful!'
}
############## Clean Enviroment ###########################################################
CleanEnviroment()
{
echo 'APP:MSG:Start clean the system enviroment...'
########### <--add your own script here to clean the enviroment if you like--> ##########
########### <--add your own script here to clean the enviroment if you like--> ##########
echo 'APP:MSG:Clean the system enviroment over...'
}
############## Data Prepare ###############################################################
totalNewConvertIn=0
totalOldConvertIn=0
totalNewExtractIn=0
totalOldExtractIn=0
DataPrepare()
{
if [ ! -d ${NewDataSourceDir} -o ! -d ${OldDataSourceDir} ]
then
echo 'APP:ERROR:Data source error'
exit
fi
echo 'APP:MSG:Data start prepare...'
if [ ${NewConvertFlag} = "on" ]
then
cp -r ${NewDataSourceDir}/${NewDataSourceExp} ${NewConvertBinIn}
let totalNewConvertIn=`ls -1 ${NewConvertBinIn} | wc -l`
echo 'APP:MSG:The total number of new file need convert in ['${NewConvertBinIn}'] is ['${totalNewConvertIn}']'
else
cp -r ${NewDataSourceDir}/${NewDataSourceExp} ${NewConvertBinOut}
let totalNewExtractIn=`ls -1 ${NewConvertBinOut} | wc -l`
echo 'APP:MSG:The total number of new file need extract in ['${NewConvertBinOut}'] is ['${totalNewExtractIn}']'
fi
if [ ${OldConvertFlag} = "on" ]
then
cp -r ${OldDataSourceDir}/${OldDataSourceExp} ${OldConvertBinIn}
let totalOldConvertIn=`ls -1 ${OldConvertBinIn} | wc -l`
echo 'APP:MSG:The total number of new file need convert in ['${OldConvertBinIn}'] is ['${totalOldConvertIn}']'
else
cp -r ${OldDataSourceDir}/${OldDataSourceExp} ${OldConvertBinOut}
let totalOldExtractIn=`ls -1 ${OldConvertBinOut} | wc -l`
echo 'APP:MSG:The total number of new file need extract in ['${OldConvertBinOut}'] is ['${totalOldExtractIn}']'
fi
echo 'APP:MSG:Data prepare over...'
}
############## Convert Part ###############################################################
ConvertFile()
{
if [ ${NewConvertFlag} = "on" ]
then
if [ 0 -eq `ls -1 ${NewConvertBinIn} | wc -l` ]
then
echo 'APP:MSG:No file exist in '${NewConvertBinIn}
exit
else
let totalNewConvertIn=`ls -1 ${NewConvertBinIn} | wc -l`
newCurPercent=0
newTmpPercent=0
echo 'APP:MSG:Start convert new file:'
echo 'APP:MSG:The total file number in the ['${NewConvertBinIn}'] is ['${totalNewConvertIn}']'
echo 'APP:MSG:\c'
nohup ${NewConvertBinDir} ${NewConvertBinCfg} &
sleep 1
echo 'APP:MSG:Process Bar:____________________________________________50%_________________________________________________100%'
echo 'APP:MSG:Convert Pro:\c'
while [ 0 -lt `ls -1 ${NewConvertBinIn} | wc -l` ]
do
newExtCurFile=`ls -1 ${NewConvertBinIn} | wc -l`
let NewDValue=totalNewConvertIn-newExtCurFile
let newCurPercent=${NewDValue}\*100/${totalNewConvertIn}
while [ ${newTmpPercent} -lt ${newCurPercent} ]
do
echo '#\c'
let newTmpPercent=newTmpPercent+1
done
done
while [ $newTmpPercent -lt 100 ]
do
echo '#\c'
let newTmpPercent=newTmpPercent+1
done
newConvertId=`ps -ef | grep ${NewConvertBinDir} | grep ${NewConvertBinCfg} | awk '{printf("%s",$2);}'`
echo '\nAPP:MSG:New convert program id is ['${newConvertId}']'
kill ${newConvertId}
echo 'APP:MSG:New convert program was killed!'
echo 'APP:MSG:New file Convert over!'
fi
fi
if [ ${OldConvertFlag} = "on" ]
then
if [ 0 -eq `ls -1 ${OldConvertBinIn} | wc -l` ]
then
echo 'APP:MSG:No file exist in '${OldConvertBinIn}
exit
else
let totalOldConvertIn=`ls -1 ${OldConvertBinIn} | wc -l`
oldCurPercent=0
oldTmpPercent=0
echo 'APP:MSG:Start convert old file:'
echo 'APP:MSG:The total file number in the ['${OldConvertBinIn}'] is ['${totalOldConvertIn}']'
echo 'APP:MSG:\c'
nohup ${OldConvertBinDir} ${OldConvertBinCfg} &
sleep 1
echo 'APP:MSG:Process Bar:____________________________________________50%_________________________________________________100%'
echo 'APP:MSG:Convert Pro:\c'
while [ 0 -lt `ls -1 ${OldConvertBinIn} | wc -l` ]
do
oldExtCurFile=`ls -1 ${OldConvertBinIn} | wc -l`
let OldDValue=totalOldConvertIn-oldExtCurFile
let oldCurPercent=${OldDValue}\*100/${totalOldConvertIn}
while [ ${oldTmpPercent} -lt ${oldCurPercent} ]
do
echo '#\c'
let oldTmpPercent=oldTmpPercent+1
done
done
while [ $oldTmpPercent -lt 100 ]
do
echo '#\c'
let oldTmpPercent=oldTmpPercent+1
done
oldConvertId=`ps -ef | grep ${OldConvertBinDir} | grep ${OldConvertBinCfg} | awk '{printf("%s",$2);}'`
echo '\nAPP:MSG:Old convert program id is ['${oldConvertId}']'
kill ${oldConvertId}
echo 'APP:MSG:Old convert program was killed!'
echo 'APP:MSG:Old file Convert over!'
fi
fi
}
############## Extract Part ###############################################################
ExtractFile()
{
if [ ${NewCmpExtractFlag} = "on" ]
then
if [ 0 -eq `find ${NewConvertBinOut} -type f | wc -l` ]
then
echo 'APP:MSG:No file exist in '${NewConvertBinOut}
else
echo 'APP:MSG:Start Extract new file,and copy the extract file to compare program in dir,then move it to SystemBak dir'
let totalNewExtractIn=`ls -1 ${NewConvertBinOut} | wc -l`
echo 'APP:MSG:The total file in ['${NewConvertBinOut}'] is ['${totalNewExtractIn}']'
BakDate=`date +%Y%m%d`
if [ ! -d ${SystemBak}/${BakDate} ]
then
mkdir ${SystemBak}/${BakDate}
fi
if [ 0 -lt `find ${NewConvertBinOut} -type f | wc -l` ]
then
echo 'APP:MSG:Process Bar:____________________________________________50%_________________________________________________100%'
echo 'APP:MSG:Extract Pro:\c'
newExtractTmpPercent=0
newExtractCurPercent=0
newExtractTotal=0
find ${NewConvertBinOut} -type f | while read newConvertFile
do
newConvertTmp=`basename ${newConvertFile}`
newExtractTmpFile=`echo ${NewCmpFilePrex}${newConvertTmp}`
cat ${newConvertFile} | awk -F ${NewConvertSplit} '{
newExStr=""
newExKeyStr="'$NewCmpExtractKey'"
newExSemStr="'$NewCmpExtractSem'"
while(length(newExKeyStr) || length(newExSemStr))
{
newKeyTmpCur=index(newExKeyStr,",")
newSemTmpCur=index(newExSemStr,",")
if (newKeyTmpCur == 0)
{
newKeyTmpCur=length(newExKeyStr)+1;
}
if (newSemTmpCur == 0)
{
newSemTmpCur=length(newExSemStr)+1;
}
newSemTmp=substr(newExSemStr,1,newSemTmpCur-1)
newSemTmpIndex=index(newSemTmp,":")
newSemTmpLen=substr(newSemTmp,newSemTmpIndex+1)
newKeyTmp=substr(newExKeyStr,1,newKeyTmpCur-1)
newExStrTmp=$newKeyTmp
newExStrFormat=formatStr(newExStrTmp,newSemTmpLen)
if (newExStr == "")
{
newExStr=newExStrFormat;
}
else
{
newExStr=sprintf("%s %s",newExStr,newExStrFormat)
}
if(index(newExKeyStr,",") == 0)
{
newExKeyStr=""
}
newExKeyStr=substr(newExKeyStr,newKeyTmpCur+1)
if(index(newExSemStr,",") == 0)
{
newExSemStr=""
}
newExSemStr=substr(newExSemStr,newSemTmpCur+1)
}
printf("%s\n",newExStr);
}
function formatStr (str,len)
{
formatstr=""
strLen=length(str)
sprintf("len %d,strlen%d",len,strLen)
if(strLen>len)
{
formatstr=substr(str,1,len);
}
else
{
formatstr=str
dValue=len-strLen
while(dValue)
{
formatstr=sprintf("%s ",formatstr)
dValue--
}
}
return formatstr
}
'>${SystemTmp}/${newExtractTmpFile}
let newExtractTotal=newExtractTotal+1
let newExtractCurPercent=${newExtractTotal}\*100/${totalNewExtractIn}
while [ ${newExtractTmpPercent} -lt ${newExtractCurPercent} ]
do
echo '#\c'
let newExtractTmpPercent=newExtractTmpPercent+1
done
cp ${SystemTmp}/${newExtractTmpFile} ${CmpFileNewIn}
mv ${SystemTmp}/${newExtractTmpFile} ${SystemBak}/${BakDate}
done
fi
echo '\nAPP:MSG:Extract new file over,copy and move the file sucessfully!'
fi
fi
if [ ${OldCmpExtractFlag} = "on" ]
then
if [ 0 -eq `find ${OldConvertBinOut} -type f | wc -l` ]
then
echo 'APP:MSG:No file exist in '${OldConvertBinOut}
else
echo 'APP:MSG:Start Extract old file,and copy the extract file to compare program in dir,then move it to SystemBak dir'
let totalOldExtractIn=`ls -1 ${OldConvertBinOut} | wc -l`
echo 'APP:MSG:The total file in ['${OldConvertBinOut}'] is ['${totalOldExtractIn}']'
BakDate=`date +%Y%m%d`
if [ ! -d ${SystemBak}/${BakDate} ]
then
mkdir ${SystemBak}/${BakDate}
fi
if [ 0 -lt `find ${OldConvertBinOut} -type f | wc -l` ]
then
echo 'APP:MSG:Process Bar:____________________________________________50%_________________________________________________100%'
echo 'APP:MSG:Extract Pro:\c'
oldExtractTmpPercent=0
oldExtractCurPercent=0
oldExtractTotal=0
find ${OldConvertBinOut} -type f | while read oldConvertFile
do
oldConvertTmp=`basename ${oldConvertFile}`
oldExtractTmpFile=`echo ${OldCmpFilePrex}${oldConvertTmp}`
cat ${oldConvertFile} | awk -F ${OldConvertSplit} '{
oldExStr=""
oldExKeyStr="'$OldCmpExtractKey'"
oldExSemStr="'$OldCmpExtractSem'"
while(length(oldExKeyStr) || length(oldExSemStr))
{
oldKeyTmpCur=index(oldExKeyStr,",")
oldSemTmpCur=index(oldExSemStr,",")
if (oldKeyTmpCur == 0)
{
oldKeyTmpCur=length(oldExKeyStr)+1;
}
if (oldSemTmpCur == 0)
{
oldSemTmpCur=length(oldExSemStr)+1;
}
oldSemTmp=substr(oldExSemStr,1,oldSemTmpCur-1)
oldSemTmpIndex=index(oldSemTmp,":")
oldSemTmpLen=substr(oldSemTmp,oldSemTmpIndex+1)
oldKeyTmp=substr(oldExKeyStr,1,oldKeyTmpCur-1)
oldExStrTmp=$oldKeyTmp
oldExStrFormat=formatStr(oldExStrTmp,oldSemTmpLen)
if (oldExStr == "")
{
oldExStr=oldExStrFormat;
}
else
{
oldExStr=sprintf("%s %s",oldExStr,oldExStrFormat)
}
if(index(oldExKeyStr,",") == 0)
{
oldExKeyStr=""
}
oldExKeyStr=substr(oldExKeyStr,oldKeyTmpCur+1)
if(index(oldExSemStr,",") == 0)
{
oldExSemStr=""
}
oldExSemStr=substr(oldExSemStr,oldSemTmpCur+1)
}
printf("%s\n",oldExStr);
}
function formatStr (str,len)
{
formatstr=""
strLen=length(str)
sprintf("len %d,strlen%d",len,strLen)
if(strLen>len)
{
formatstr=substr(str,1,len);
}
else
{
formatstr=str
dValue=len-strLen
while(dValue)
{
formatstr=sprintf("%s ",formatstr)
dValue--
}
}
return formatstr
}
'>${SystemTmp}/${oldExtractTmpFile}
let oldExtractTotal=oldExtractTotal+1
let oldExtractCurPercent=${oldExtractTotal}\*100/${totalOldExtractIn}
while [ ${oldExtractTmpPercent} -lt ${oldExtractCurPercent} ]
do
echo '#\c'
let oldExtractTmpPercent=oldExtractTmpPercent+1
done
cp ${SystemTmp}/${oldExtractTmpFile} ${CmpFileOldIn}
mv ${SystemTmp}/${oldExtractTmpFile} ${SystemBak}/${BakDate}
done
fi
echo '\nAPP:MSG:Extract old file over,copy and move the file sucessfully!'
fi
fi
}
############## Compare Part ###############################################################
CompareFile()
{
if [ 0 -eq `find ${CmpFileNewIn} -type f | wc -l` ]
then
echo 'APP:MSG:There is no file exist in ['${CmpFileNewIn}']'
exit
fi
if [ 0 -eq `find ${CmpFileOldIn} -type f | wc -l` ]
then
echo 'APP:MSG:There is no file exist in ['${CmpFileOldIn}']'
exit
fi
echo 'APP:MSG:Start comprae file...'
totalCmpNewFileIn=`ls -1 ${CmpFileNewIn} | wc -l`
totalCmpOldFileIn=`ls -1 ${CmpFileOldIn} | wc -l`
echo 'APP:MSG:The total number of file in ['${CmpFileNewIn}'] is ['${totalCmpNewFileIn}']'
echo 'APP:MSG:The total number of file in ['${CmpFileOldIn}'] is ['${totalCmpOldFileIn}']'
cmpCurPercent=0
cmpTmpPercent=0
echo 'APP:MSG:\c'
nohup ${CmpBinDir} ${CmpBinCfg} &
sleep 1
echo 'APP:MSG:Process Bar:____________________________________________50%_________________________________________________100%'
echo 'APP:MSG:Compare Pro:\c'
while [ 0 -lt `ls -1 ${CmpFileNewIn} | wc -l` ]
do
totalCurCmpFileIn=`ls -1 ${CmpFileNewIn} | wc -l`
let fileDvalue=totalCmpNewFileIn-totalCurCmpFileIn
let cmpCurPercent=${fileDvalue}\*100/${totalCmpNewFileIn}
while [ ${cmpTmpPercent} -lt ${cmpCurPercent} ]
do
echo '#\c'
let cmpTmpPercent=cmpTmpPercent+1
done
done
while [ ${cmpTmpPercent} -lt 100 ]
do
echo '#\c'
let cmpTmpPercent=cmpTmpPercent+1
done
sleep 5
theCompareId=`ps -ef | grep ${CmpBinDir} | grep ${CmpBinCfg} | awk '{printf("%s",$2);}'`
if [ -n "$theCompareId" ]
then
kill $theCompareId
fi
echo '\nAPP:MSG:Compare Result:'
tail nohup.out
echo 'APP:MSG:Compare file over...'
}
############## Main Program ###############################################################
CheckFile
#CleanEnviroment
DataPrepare
ConvertFile
ExtractFile
CompareFile
相关文章推荐
- 话单比对统一解决方案(基于Shell) -- 一个shell学习的很好很强大的例子哦
- 基于企业私有云的统一通信解决方案-2
- 基于企业私有云的统一通信解决方案
- 基于企业私有云的统一通信解决方案-3
- 基于.NET Framework 4.0的解决方案部署
- MFC中在基于对话框的窗体中使用CFileDialog导致菜单栏变灰的解决方案
- 信必优将全新的基于意法半导体Accordo 5汽车处理器的数字信息娱乐解决方案推向市场
- 组件化远程私有库解决方案(cocoapods基于git 、svn)----高级版
- 美国银行基于WebFOCUS为百万级用户提供信用卡报表解决方案
- Javascript中无法创建ActiveXObject("WScript.Shell")对象的解决方案
- 基于一张图的城市智慧管网解决方案
- 基于.Net的单点登录(SSO)解决方案
- MADlib——基于SQL的数据挖掘解决方案(7)——数据转换之其它转换
- MOSS基于AD的用户组织目录树选择工具的解决方案
- shell中if条件字符串、数字比对,[[ ]]和[ ]区别
- 基于XBee PRO SX无线模块RTK远距离数传解决方案
- 解读基于数加的大数据仓库解决方案
- 基于SpringCloud开发的微服务在Docker Swarm集群中跨Host主机通信的一种解决方案
- 基于zookeeper应用——简单统一命名服务实现
- 基于CentOS的MySQL学习补充三--使用Shell批量创建数据库表