Chinaunix
标题:
拜请各位大牛,实在是搞不定了!!!! 急急急!!!!!
[打印本页]
作者:
5itle
时间:
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|
之前请教各位大牛遇到的问题: 数太长 处理后变成科学计数法了,正负号 小数点 处理不好,总会截错位置。。。
本人搞了三四天,实在搞不定了。。。。。。。。。。
作者:
5itle
时间:
2011-11-14 23:32
`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`
复制代码
这些是之前请教各位大牛给出的代码
我整理运行之后 还是有一些问题
作者:
lkk2003rty
时间:
2011-11-14 23:33
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'
复制代码
作者:
5itle
时间:
2011-11-14 23:34
大家帮忙把帖子顶起来吧, 期待大牛出现。。。。
作者:
5itle
时间:
2011-11-14 23:37
回复
3#
lkk2003rty
这位兄弟 |0406| 处理后变成|46 | 这样不行啊 要变成|406| 才成啊
依然感谢你
作者:
lkk2003rty
时间:
2011-11-14 23:50
本帖最后由 lkk2003rty 于 2011-11-15 00:12 编辑
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
作者:
5itle
时间:
2011-11-14 23:57
回复
6#
lkk2003rty
|0406|654321000000003632 | 处理为 |406|654321000000003632|
兄弟你的代码处理为 |46|6543213632| 了 这样不行呀。。 还有别的办法吗
作者:
5itle
时间:
2011-11-14 23:59
回复
6#
lkk2003rty
|+100.50| 也处理成 |+10.50|了 不知道咋少了一位
作者:
lkk2003rty
时间:
2011-11-15 00:04
回复 lkk2003rty
|+100.50| 也处理成 |+10.50|了 不知道咋少了一位
5itle 发表于 2011-11-14 23:59
i fix it u can try again
作者:
zooyo
时间:
2011-11-15 00:11
提示:
作者被禁止或删除 内容自动屏蔽
作者:
yinyuemi
时间:
2011-11-15 01:42
sed -r -e 's/\s+//g' -e 's/(\|[+-]?)0{1,}/\1/g' -e 's/\|\./|0./g'
复制代码
作者:
waker
时间:
2011-11-15 08:13
看不太清晰,希望以前的帖子对你有所帮助
http://bbs.chinaunix.net/thread-3613795-1-1.html
http://bbs.chinaunix.net/thread-3613978-1-1.html
作者:
5itle
时间:
2011-11-15 08:30
回复
12#
waker
这位大牛上回帮我回答的那个AWK, 处理之后 20为的整数 就变成科学计数法了。。。。
作者:
expert1
时间:
2011-11-15 09:44
up ,看看先
作者:
jiejie455
时间:
2011-11-15 10:23
试试这个
sed -e 's/[ \t]\+//g' -e 's/0*\([1-9.][0-9.]*|\)/\1/g' data
sed -r 's/\|[0.]0+/|0/g' data
作者:
_man_mk_
时间:
2011-11-15 10:40
可不可以这样?大体思路如下,一步一步来。 可能有些地方不对。
sed -e 's/[ \t]*//g' -e 's/|\([-+]\)00*/|\1/g' -e 's/|00*/|/g' -e 's/\(\.[1-9]*\)00*|/\1|/g' -e 's/|\./|0\./g' -e 's/\(\.[0-9]\)|/\10|/g' -e 's/\.|/.00|/g' filename
's/[ \t]*//g' 除空格
's/|\([-+]\)00*/|\1/g' 删除 +-后 无用的 0 -> |(+-)00000123123| -> |(+-)123123|
s/|00*/|/g 删除 开始无用的0 |00000123123| -> |123123|
s/\(\.[1-9]*\)00*|/\1|/g 删除小数点后无用的0
s/|\./|0\./g 修正 |. -> |0.
s/\(\.[0-9]\)|/\10|/g 修正 一位小数为 两位小数
s/\.|/.00|/g 修正 有小数点,没有小数的为 2位小数
作者:
jason680
时间:
2011-11-15 10:56
这问题这么火....
这问题,不是不能解,而在于lz说明不清,遗漏一堆
1. 这个没说明....
0000000.00|0000000000.00|00.00 处理后??
注:有说明|0000| 处理后 ||
2. 同样都是0开头,却有不同结果....什么规则..??
|
0
11201CARDCENTER | 处理后|
0
11201CARDCENTER|
|
0
9JUL11| 处理后 |9JUL11|
有人说:有完整的问题,才会有完整的答案....
作者:
liaoliaofannao
时间:
2011-11-15 14:10
看下 对着方面不太了解 不过帮你顶下
作者:
ljs4053
时间:
2011-11-15 15:40
回复
1#
5itle
建议你采用分步来做,比如说第一步我只做去掉前面的0啊什么的,不要一口气来啊,
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2