WEB开发网
开发学院软件开发Shell 一个 Shell 程序的性能优化 阅读

一个 Shell 程序的性能优化

 2009-06-30 04:50:00 来源:WEB开发网   
核心提示: 解决方法2:将内层循环的逐个比较的方法改为二分查找法进行判断,程序代码如下:#!/bin/bash#Author Xsh date:08-15-2006#程序中使用了二分查找法进行号码的范围判断#为突出重点,一个 Shell 程序的性能优化(2),省略了文件存在性判断和异常捕获以及帮助提示等程序语句#程序的工作目录

解决方法2:

将内层循环的逐个比较的方法改为二分查找法进行判断,程序代码如下:


#!/bin/bash
#Author Xsh  date:08-15-2006
#程序中使用了二分查找法进行号码的范围判断
#为突出重点,省略了文件存在性判断和异常捕获以及帮助提示等程序语句
#程序的工作目录为当前目录

echo "Time:$(date)==>Strat to processing........." #显示程序开始运行时间
while read numseg
do
tmplow="${tmplow} $(expr substr ${numseg} 1 10 & >/dev/null ) "
tmptop="${tmptop} $(expr substr ${numseg} 12 10 & >/dev/null ) "
done < ./numseg.txt
#读取号段文件,下限号段存入变量tmplow,上限号段存入变量tmptop
arr_lownug=(${tmplow}) #将下限号段存入数组arr_lownug
arr_topnug=(${tmptop})	#将上限号段存入数组arr_topnug

#定义函数checknum(),输入参数为需要检查的"计费号码",输出参数为0或者1
#若checknum()输出为0 表示"计费号码" 不在号段文件的所有号段范围内
#若checknum()输出为1 表示"计费号码" 在号段文件的所有号段范围内
# checknum()函数中用二分搜索法进行号码的判断
checknum(){
thisnum=$1
ckresult=0
lowflag=0
topflag=$(expr ${#arr_lownug[*]} - 1 )  #标注1
MaxIndex=$(expr ${#arr_topnug[*]} - 1 ) #标注2
midflag=0
midflag=$(expr ${topflag} / 2 )		#标注3
if [ "${thisnum}" \< "${arr_lownug[0]}" -o "${thisnum}" \>
"${arr_topnug[${MaxIndex}]}"  ]
then
return 0
else
while [ "$lowflag" != "$midflag" ]
do
if[ "$thisnum" \> "${arr_lownug[${midflag}]}" -o "$thisnum" == \
"${arr_lownug[${midflag}]}" ]
then
lowflag=${midflag}
midflag=$(expr `expr ${topflag} + ${lowflag}` / 2 ) #标注4
elif["$thisnum"\<"${arr_lownug[${midflag}]}" -o "$thisnum" == \
"${arr_lownug[${midflag}]}" ] 
then
topflag=${midflag}
midflag=$(expr `expr ${topflag} + ${lowflag}` / 2 ) #标注5
else
echo "Error!"   
fi
done 
if [ "$thisnum" \< "${arr_topnug[${lowflag}]}" -o "$thisnum" == \
"${arr_topnug[${lowflag}]}" ]
then
return 1
else 
return 0 
fi
fi
}#函数定义完毕

while read f
do
org="$(expr substr ${f} 1 10)" #标注6
checknum ${org}
returnval=$?
if [ "$returnval" == "1"  ]
then 
echo "${f}" >> ./Match_result.cdr  #将匹配的记录存入结果文件1
else
echo "${f}" >> ./NoMatch_result.cdr #将不匹配的记录存入结果文件2
fi
done < ./rttest.txt 
echo "Time:$(date) ==> Proccess is end! "
exit 0;

Tags:一个 Shell 程序

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接