拜请各位大牛,实在是搞不定了!!!! 急急急!!!!!

metears 2011-11-14 11:37:58

缘由:从数据库中导出的每天的增量文件, 每个字段用“|” 间隔, 由于所应用语言比较特殊处理文本相当的麻烦(百度都搜不到这种语言),决定用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|


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

本人搞了三四天,实在搞不定了。。。。。。。。。。
...全文
214 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
nanjingnew4 2011-11-18
  • 打赏
  • 举报
回复
数字加英文开头有0的怎么处理,楼主说话有矛盾
|011201CARDCENTER | 处理后 |011201CARDCENTER|
|09JUL11| 处理后 |9JUL11|
jcback 2011-11-17
  • 打赏
  • 举报
回复
sed -e 's/ //g' -e 's/|0*/|/g' -e 's/|+0*/|+/g' -e 's/|-0*/|-/g' -e 's/|\./|0./g' -e 's/|0.00/|/g' file>result


|406|654321000000003632||223501888812345678|张三|||||11201|259|123456140000000013|4062410|1234560100011900125=49121002147281|43E39B564A4C9434|9JUL11|B|+100.00|-888.88|300.00|50|0.50|+100.50|+1100.00|+100|-100|-100.00|-100.00|-50|-50.50|MBKIO|11201CARDCENTER|2617|]?垰??|
向良玉 2011-11-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 metears 的回复:]
缘由:从数据库中导出的每天的增量文件, 每个字段用“|” 间隔, 由于所应用语言比较特殊处理文本相当的麻烦(百度都搜不到这种语言),决定用SHELL处理下文本,可是没搞定,希望高手帮帮忙
之前问过一些,但始终没有达到理想的效果。可能我例举的不全 ,希望各位也帮着多想想

文件内容如下:一行
|0406|654321000000003632 ……
[/Quote]
000000.0000处理后是咋样的???
|09JUL11| 处理后 |9JUL11| 跟|011201CARDCENTER | 处理后 |011201CARDCENTER|不是冲突吗?
你是指的 数字+非数字+数字就去掉前面的0 数字+非数字就不去掉???
justkk 2011-11-16
  • 打赏
  • 举报
回复
sed -e 's/ //g' -e 's/\|0*/\|/g' -e 's/\.00//g' -e 's/\+0*/\+/g' -e 's/\-0*/\-/g' yourfile > yourfile.new
dq 2011-11-16
  • 打赏
  • 举报
回复
还不会,不过支持下。
mirrorspace 2011-11-15
  • 打赏
  • 举报
回复
用perl啊.哈
metears 2011-11-14
  • 打赏
  • 举报
回复
`awk -v FS=\| -v OFS=\| '{for(i=1;i<=NF;i++){sub(/^ +/,"",$i);$i=($i==0)?"":$i} }1' ${NAME} > temp.txt`


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

`sed 's/+0*\([^0|.]\)/+\1/g;s/0*\(0\.0*[^0]*\)[^|]*/\1/g' temp_1.txt > temp_2.txt`

这些是之前请教给出的代码

我整理运行之后 还是有一些问题 希望大家帮忙把帖子顶起来 期待大牛出现 谢谢各位

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧