免费注册 查看新帖 |

Chinaunix

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

急 ---求助文件中的数据处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-12-07 21:03 |只看该作者 |倒序浏览
我现在有一个文件内容如下:
123456     345678       2005.05.06    123456
123456     234567       2003.5.6      234567
345555     987644       2003.4.23     543333
555555     999999       2004.11.5     999999

要将第四列数据变成正常的年月日,将2003.5.6 变成2003.05.0;
2003.4.23变成2003.04.23; 2004.11.5变成 2004.11.05

请高手指点 通过shell 、awk等工具在unix系统下处理。

论坛徽章:
0
2 [报告]
发表于 2004-12-07 22:07 |只看该作者

急 ---求助文件中的数据处理

原来红袖帮我解决过类似问题
不过我的日期格式是2003-4-23变成2003-04-23
你试一下吧
sed 's/-\([1-9]\)-/-0\1-/g' file

论坛徽章:
0
3 [报告]
发表于 2004-12-07 22:33 |只看该作者

急 ---求助文件中的数据处理

大侠我用了你的脚本了。
qq.unl文件内容为:
123456 345678 2005-05-06 123456
123456 234567 2003-5-6 234567
345555 987644 2003-4-23 543333
555555 999999 2004-11-5 999999
执行sed 's/-\([1-9]\)-/-0\1-/g' qq.unl 后 ,如下:
123456 345678 2005-05-06 123456
123456 234567 2003-05-6 234567
345555 987644 2003-04-23 543333
555555 999999 2004-11-5 999999

可以将第四列中的月份处理,这是OK的;但是对于日,无法处理。还请大侠指点。 谢谢 !!!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2004-12-07 23:04 |只看该作者

急 ---求助文件中的数据处理

[sam@chenwy sam]$cat file | sed 's/-\([0-9]\)-/-0\1-/g' | sed 's/-\([0-9]\) /-0\1 /g'
再加一句,嘿嘿

论坛徽章:
0
5 [报告]
发表于 2004-12-07 23:44 |只看该作者

急 ---求助文件中的数据处理

谢谢楼主提供的命令,可以实现需求。

感谢ing !!!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2004-12-08 07:55 |只看该作者

急 ---求助文件中的数据处理

我本来是想这么写的
-[0-9]\{1\},仅一个数字,但这样不行,不知道该怎么写,那样就能通用了

论坛徽章:
0
7 [报告]
发表于 2004-12-08 09:07 |只看该作者

急 ---求助文件中的数据处理

这样效率高一点:

cat file | sed -e :a -e 's/-\([0-9]\)\([- ]\)/-0\1\2/;ta'

or

cat file | sed 's/-\([0-9]\)-/-0\1-/; s/-\([0-9]\) /-0\1 /'

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2004-12-08 09:56 |只看该作者

急 ---求助文件中的数据处理

[quote]原帖由 "lightspeed"]-0\1 /'[/quote 发表:


cat file | sed -e :a -e 's/-\([0-9]\)\([- ]\)/-0\1\2/;ta'

这个用法没见过,能说明一下吗

论坛徽章:
0
9 [报告]
发表于 2004-12-08 11:52 |只看该作者

急 ---求助文件中的数据处理

原帖由 "wingger" 发表:
\1\2/;ta'

这个用法没见过,能说明一下吗


:a - label
ta - goto to :a to rerun sed if the last sed is  finished successfully.

简单说, 就是循环。

论坛徽章:
0
10 [报告]
发表于 2004-12-08 15:07 |只看该作者

急 ---求助文件中的数据处理

使用awk写的代码;
awk '{split($3,a,".";$3=sprintf("%s-%02s-%02s",a[1],a[2],a[3]);print $0}' 1
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP