楼主: happyblue

难题,请高手指教。

[复制链接]
论坛徽章:
0
11#
 楼主| 发表于 2003-1-21 14:30 | 只看该作者
好象没那么麻烦吧,我觉得这个转换应该简单,我上面的shell大致可以完成的,只是我现在不知道怎么去判断是否是空行。:):)

使用道具 举报

回复
论坛徽章:
0
12#
 楼主| 发表于 2003-1-21 14:42 | 只看该作者
好象没那么麻烦吧,我觉得这个转换应该简单。因为无论中间有几行,头和尾都是固定的(都为一行,头为邮编,尾为姓名),我的想法是:
     第一个读入的非空行就作为头行,下一行为空行的那一行就是尾行,中间的为地址行,这样无论地址行有多少行都可以加以控制并转化。
     
我上面的shell大致可以完成的,只是我现在不知道怎么去判断是否是空行。:):)

使用道具 举报

回复
论坛徽章:
5
13#
发表于 2003-1-22 09:00 | 只看该作者
如果是UNIX下的东西这样贴出来肯定都变样了。
我是让你贴文件。
最初由 happyblue 发布
[B]我最前面有一小段文本样本啊。
1.txt内容:234200
灵璧县电信分公司
供应科
胡科长  收

235300
砀山县电信分公司
赵爱民  收

235300
砀山县电信分公司运维处
沈  涛  主任收

234300
泗县电信分公司
高  峰  收


231600
肥东县电信分公司
周文育  收

231600
肥东县电信分公司
运维处
李卫华  收

230001
安徽省电信公司运维处
韩祖裕  处长收

230001
安徽省电信公司计划建设处
蒋立三  处长收

230001
安徽省电信公司计划建设处
张建收  收

230001
安徽省邮电学校总务科
徐少杰  收

230001
安徽省邮电规划设计院
无线设计院
张华峰  收 [/B]

使用道具 举报

回复
论坛徽章:
0
14#
 楼主| 发表于 2003-1-22 09:07 | 只看该作者
怎么用附件贴文件啊

使用道具 举报

回复
论坛徽章:
5
15#
发表于 2003-1-22 09:14 | 只看该作者
点击回复话题,选择“上传文件”

使用道具 举报

回复
论坛徽章:
0
16#
 楼主| 发表于 2003-1-22 09:22 | 只看该作者
贴上来了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

使用道具 举报

回复
论坛徽章:
5
17#
发表于 2003-1-22 09:56 | 只看该作者

因为没有HPUX,我在AIX433下调试通过,不知道二者差别大否。

postcode=
address=
title=
typeset -i i=1
tr -s '\n' <1.txt >2.txt
>out.txt
while [[ $i -le `wc -l 2.txt|awk '{print $1}'` ]]
do
        sline=`sed -n "${i}p" 2.txt`
        if [[ `echo $sline|grep -c ^[[:digit:]]` -gt 0 ]]
        then
                echo  $postcode "|" $address "|" $title >>out.txt
                postcode=$sline
                address=""
        else
        if [[ `echo $sline|grep -c 收` -eq 0 ]]
        then
                address=`echo $address $sline`
        else
                title=$sline
        fi
        fi
        i=i+1
done
echo  $postcode "|" $address "|" $title >>out.txt

使用道具 举报

回复
论坛徽章:
0
18#
 楼主| 发表于 2003-1-22 12:54 | 只看该作者
真的很感谢slls
想请教一下
if [[ `echo $sline|grep -c ^[[:digit:]]` -gt 0 ]]
这句是什么意思

使用道具 举报

回复
论坛徽章:
0
19#
发表于 2003-1-22 13:24 | 只看该作者
[[:digit:]] 等价于[0-9],
开头字符为数字,则为邮编.
slls好强啊,awk,sed,正则表达式都用上了

使用道具 举报

回复
论坛徽章:
0
20#
 楼主| 发表于 2003-1-23 10:59 | 只看该作者
谢谢各位的热心帮助,下面这个程序经测试在HP-UX和UNIXWARE上都能运行。
post.sh
----------------------------------------
#!/bin/ksh

postcode=
address=
title=
i=1

tr -s '\n' <1.txt >2.txt
>out.txt
while [ $i -le `wc -l 2.txt|awk '{print $1}'` ]
do
   sline=`sed -n "${i}p" 2.txt`
   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
--------------------------------------

wc 1.txt
     15134 14849 195692 1.txt

wc 2.txt
      11680 14849 192238 2.txt

wc out.txt
      2368 16237 144011 out.txt
        
运行时间在两个系统上均为5分多钟,我觉得是不是慢了点啊。
是否可以继续优化??

使用道具 举报

回复

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

本版积分规则 发表回复

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