免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2909 | 回复: 17
打印 上一主题 下一主题

关于SHELL处理文件效率的问题。。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-12-08 13:37 |只看该作者 |倒序浏览
目标:对总分文件作总分检查
实现:C和SHELL
结果:C程序用时大概1分钟,SHELL用时3个小时。

文件有4万行,

  1. cat $file|while read i
  2. do
  3. .......
  4. done
复制代码


各位老大,有没有其它读文件效率更高的方法啊?

论坛徽章:
0
2 [报告]
发表于 2003-12-08 13:40 |只看该作者

关于SHELL处理文件效率的问题。。

那你还是用你的C去吧~~

论坛徽章:
0
3 [报告]
发表于 2003-12-08 13:41 |只看该作者

关于SHELL处理文件效率的问题。。

呵呵,没有别的办法吗?

C不是我写的,俺也不太喜欢用,于是自己写了SHELL。。

可是效率实在是太低,有点郁闷。。

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
4 [报告]
发表于 2003-12-08 13:46 |只看该作者

关于SHELL处理文件效率的问题。。

把代码拿出来,让大伙给它优化优化。
            

论坛徽章:
0
5 [报告]
发表于 2003-12-08 13:59 |只看该作者

关于SHELL处理文件效率的问题。。

原帖由 "r2007" 发表:
把代码拿出来,让大伙给它优化优化。
            




  1. # Shell Start

  2. Cal_Total(){

  3.         Total_1=0

  4.         tmp=`cat $1.$2.$3|cut -b201-214`.`cat $1.$2.$3|cut -b215-216`
  5.         Total_1=`echo $tmp|bc -l`

  6. }

  7. Cal_Parcel(){

  8.         Total_2=0
  9.         Count=0


  10.         cat $1.$2.$3|while read i   
  11.         do
  12.                 Amount=0
  13.                 Fee=0

  14.                 Flag=`echo $i|cut -b24-25`
  15.                 if [ $Flag = 30 ];then
  16.                         continue
  17.                 fi

  18.                 Bank_Flag=`echo $i|cut -b98-106`
  19.                 Amount=`echo $i|cut -b30-39`.`echo $i|cut -b40-41`
  20.                 Fee=`echo $i|cut -b67-72`.`echo $i|cut -b73-74`               

  21.                 case $Flag in
  22.                         00|01|10|11|22 )
  23.                                 Amount=`echo $Amount*-1|bc`
  24.                                 Fee=`echo $Fee*-1|bc`
  25.                                 ;;
  26.                 esac

  27.                 if [ $Bank_Flag != $2 ];then
  28.                         Amount=`echo $Amount*-1|bc`
  29.                         Fee=`echo $Fee*-1|bc`
  30.                 fi
  31.                        
  32.                 Total_2=`echo $Total_2+$Amount+$Fee|bc -l`

  33.                 Count=`expr $Count + 1`
  34.                 Count_flag=`expr $Count % 1000`
  35.                 if [ $Count_flag = 0 ];then
  36.                         echo "        Finish $Count count Total_2=$Total_2"
  37.                 fi

  38.         done

  39. }

  40. Result(){

  41.         Minus=0

  42.         Minus=`echo \($1\)-\($2\)|bc -l`
  43.         if [ $Minus = 0 ];then
  44.                 echo "        二者相差:$Minus ,结果PASS~~ \n" >> result
  45.         else
  46.                 echo "        二者相差:$Minus ,结果UNPASS~~ \n" >> result
  47.         fi

  48. }

  49. #main()

  50. if [ $# -lt 2 ];then

  51.         echo "USAGE:`basename $0` BankCode Date "
  52.         exit -1;

  53. fi

  54. IFS=;

  55. echo $2 >> result

  56. for Type in Q G S
  57. do
  58.         echo "         Checking $Type Type file ...."
  59.         Cal_Total         "$Type"1 $1 $2
  60.         Cal_Parcel        "$Type"2 $1 $2
  61.         echo    "        $Type"1中金额总数为:$Total_1|tee -a result
  62.         echo         "        $Type"2中金额总数为:$Total_2|tee -a result
  63.         Result $Total_1 $Total_2
  64.         echo "        Finished Checking $Type Type file!"
  65. done

  66. Cal_Total G5 $1 $2
  67. Cal_Parcel G6 $1 $2
  68. echo "        G5中金额总数为:$Total_1"|tee -a result
  69. echo "        G6中金额总数为:$Total_2"|tee -a result
  70. Result $Total_1 $Total_2

  71. echo "        Finished Checking ALL Type file!"


  72. # Shell End
复制代码

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2003-12-08 14:42 |只看该作者

关于SHELL处理文件效率的问题。。

無可置疑的是:先天上,直譯式語言的效能絕對比不過傳統語言。
若真的用在很大量數據上,shell 不是一個好的方案,就算優化處理,那只是後天調教而已...

若真要調整,下面這些可以參考參考:
1) 盡量用 built-in 而不要用外部命令
2) 盡可能少的調用 file I/O
3) 多用 function
4) 其它待各位補充...  ^_^

论坛徽章:
0
7 [报告]
发表于 2003-12-08 14:53 |只看该作者

关于SHELL处理文件效率的问题。。

5)该说的都让网兄说啦~~
shell是解释型语言,不算真正的编程语言,而C,ASM之类的是编译型的语言,当然编译语言的速度要远远快于shell,perl之类的"脚本"语言啦~~

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2003-12-08 15:06 |只看该作者

关于SHELL处理文件效率的问题。。

还是说说你的具体要求:什么样的数据格式,要求什么样的输出,举例说明。

论坛徽章:
0
9 [报告]
发表于 2003-12-08 15:06 |只看该作者

关于SHELL处理文件效率的问题。。

这倒是,面对对象的不同,各有优缺点。。


网兄所言第二点是何意呢?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
10 [报告]
发表于 2003-12-08 15:13 |只看该作者

关于SHELL处理文件效率的问题。。

file I/O 是指 script 所處理的數據是從 file 讀進或存進 file 。
例如:
在一些臨時或週期性的數值處理上,
若將之存存進 file 再供後面讀取,不如將之存進變量(或組數),再來調用。
諸如此類的....  ^_^

簡而言之,file I/O 對 script 效能殺傷極大,能免則免。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP