免费注册 查看新帖 |

Chinaunix

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

拜请各位大牛,实在是搞不定了!!!! 急急急!!!!! [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-05-03 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-14 23:17 |只看该作者 |倒序浏览
缘由:从数据库中导出的每天的增量文件, 每个字段用“|” 间隔,   由于所应用语言比较特殊处理文本相当的麻烦(百度都搜不到这种语言),决定用SHELL处理下文本,可是没搞定,希望高手帮帮忙
         之前问过一些,但始终没有达到理想的效果。可能我例举的不全 ,希望各位也帮着多想想

文件内容如下:一行
|0406|654321000000003632               |      |223501888812345678|张三   |0000|0000000.00|0000000000.00|00.00|011201|259|123456140000000013|00004062410|1234560100011900125=49121002147281   |43E39B564A4C9434|09JUL11|B|+000100.00|-000000888.88|0000300.00|00050|000.50|+100.50|+0001100.00|+000100|-100|-100.00|-00100.00|-00050|-00050.50|MBKIO     |011201CARDCENTER     |002617      |                 ]?垰??  |


要求:
      把多余的0去掉, 空格去掉,小数取有效数值,正负号不能去掉,不知道我说明白没有,但愿大牛们能听的懂

     例: |0406| 处理后 |406|
            |      |   处理后 ||
            |223501888812345678| 处理后 |223501888812345678|
            |张三   |  处理后   |张三|
            |0000|  处理后  ||
            |011201| 处理后 |11201|
            |09JUL11| 处理后 |9JUL11|
            |+000100.00|  处理后 |+100.00|
            |-000000888.88| 处理后 |-888.88|
            |0000300.00|   处理后 |300.00|
            |00050|     处理后 |50|
            |000.50|  处理后  |0.50|
            |+000100|  处理后 |+100|
            |-00100.00|  处理后 |-100.00|
            |-00050.50|  处理后 |-50.50|
            |011201CARDCENTER     | 处理后 |011201CARDCENTER|


之前请教各位大牛遇到的问题:   数太长  处理后变成科学计数法了,正负号 小数点 处理不好,总会截错位置。。。

   本人搞了三四天,实在搞不定了。。。。。。。。。。

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-05-03 06:20:00
2 [报告]
发表于 2011-11-14 23:32 |只看该作者
  1. `awk -v FS=\| -v OFS=\| '{for(i=1;i<=NF;i++){sub(/^ +/,"",$i);$i=($i==0)?"":$i} }1' ${NAME} > temp.txt`


  2. `sed -e :a -e 's/|[0.+][+.0]*|/||/g;s/ //g;ta' temp.txt > temp_1.txt`

  3. `sed 's/+0*\([^0|.]\)/+\1/g;s/0*\(0\.0*[^0]*\)[^|]*/\1/g' temp_1.txt > temp_2.txt`
复制代码
这些是之前请教各位大牛给出的代码

我整理运行之后  还是有一些问题

论坛徽章:
0
3 [报告]
发表于 2011-11-14 23:33 |只看该作者
  1. echo "|0406|654321000000003632               |      |223501888812345678|张三   |0000|0000000.00|0000000000.00|00.00|011201|259|123456140000000013|00004062410|1234560100011900125=49121002147281   |43E39B564A4C9434|09JUL11|B|+000100.00|-000000888.88|0000300.00|00050|000.50|+100.50|+0001100.00|+000100|-100|-100.00|-00100.00|-00050|-00050.50|MBKIO     |011201CARDCENTER     |002617      | "  | sed -r 's/\s+//g;s/0*?(0\.)/\1/g;s/0+([1-9])/\1/g;s/\|0*\|/||/g'
复制代码

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-05-03 06:20:00
4 [报告]
发表于 2011-11-14 23:34 |只看该作者
大家帮忙把帖子顶起来吧, 期待大牛出现。。。。

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-05-03 06:20:00
5 [报告]
发表于 2011-11-14 23:37 |只看该作者
回复 3# lkk2003rty


    这位兄弟  |0406|  处理后变成|46 | 这样不行啊  要变成|406| 才成啊


    依然感谢你

论坛徽章:
0
6 [报告]
发表于 2011-11-14 23:50 |只看该作者
本帖最后由 lkk2003rty 于 2011-11-15 00:12 编辑
  1.   sed -r 's/\s+//g;s/\|0*\|/||/g;s/\|0*([1-9]\d*(\.\d*)?)/|\1/g;s/\|(\+|-)0*([1-9]\d*(\.\d*)?)/|\1\2/g;s/\|0*\./|0./g'

复制代码
回复 5# 5itle

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-05-03 06:20:00
7 [报告]
发表于 2011-11-14 23:57 |只看该作者
回复 6# lkk2003rty


    |0406|654321000000003632               |  处理为    |406|654321000000003632|


兄弟你的代码处理为 |46|6543213632| 了  这样不行呀。。  还有别的办法吗

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-05-03 06:20:00
8 [报告]
发表于 2011-11-14 23:59 |只看该作者
回复 6# lkk2003rty


    |+100.50|   也处理成 |+10.50|了  不知道咋少了一位

论坛徽章:
0
9 [报告]
发表于 2011-11-15 00:04 |只看该作者
回复  lkk2003rty


    |+100.50|   也处理成 |+10.50|了  不知道咋少了一位
5itle 发表于 2011-11-14 23:59



    i fix it  u can try again

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
10 [报告]
发表于 2011-11-15 00:11 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP