123
返回列表 发新帖
楼主: happyblue

难题,请高手指教。

[复制链接]
论坛徽章:
5
21#
发表于 2003-1-23 12:44 | 只看该作者
我觉得主要慢在这句中: sline=`sed -n "${i}p" 2.txt`
每次执行这句都要从文件头读到第i行,而不会在上次的基础上继续往下找。
要想再快些,还是用C吧。

使用道具 举报

回复
论坛徽章:
5
22#
发表于 2003-1-23 12:47 | 只看该作者
可以把while [ $i -le `wc -l 2.txt|awk '{print $1}'` ] 中的`wc -l 2.txt|awk '{print $1}'` 赋给一个变量,不用每次循环都计算2.txt文件的行数。

使用道具 举报

回复
论坛徽章:
5
23#
发表于 2003-1-23 13:15 | 只看该作者

to happyblue

刚才看见你用cat 1.txt | while read line 作为循环条件和读取文件,方法很高明,比我那笨办法强多了!
把你的循环和我的循环内判断方法结合起来应该会快不少。

使用道具 举报

回复
论坛徽章:
0
24#
 楼主| 发表于 2003-1-23 13:52 | 只看该作者
我改了一下, 执行时间缩短为1分半
post.sh:
-----------------------------------------
#!/bin/ksh

postcode=
address=
title=
i=1

tr -s '\n' <1.txt >2.txt
>out.txt
cat 2.txt | while read sline
do
   if [ `echo $sline|grep -c "^[0-9]"` -gt 0 ];then
         postcode=$sline
         address=""
   else
         if [ `echo $sline|grep -c 收` -eq 0 ];then
            address=`echo $address $sline`
         else
            title=$sline
            echo $postcode "|" $address "|" $title >>out.txt
            postcode=' '
            address=' '
            title=' '
         fi
   fi
i=`expr $i + 1`

done

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表