日期:2014-05-16  浏览次数:20539 次

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

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


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

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


------解决方案--------------------
sed -e 's/ //g' -e 's/\|0*/\|/g' -e 's/\.00//g' -e 's/\+0*/\+/g' -e 's/\-0*/\-/g' yourfile > yourfile.new
------解决方案--------------------
探讨
缘由:从数据库中导出的每天的增量文件, 每个字段用“|” 间隔, 由于所应用语言比较特殊处理文本相当的麻烦(百度都搜不到这种语言),决定用SHELL处理下文本,可是没搞定,希望高手帮帮忙
之前问过一些,但始终没有达到理想的效果。可能我例举的不全 ,希望各位也帮着多想想

文件内容如下:一行
|0406|654321000000003632 ……

------解决方案--------------------
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|]?垰??|