免费注册 查看新帖 |

Chinaunix

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

灵活替换的问题,sed,awk均可 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-13 15:44 |只看该作者 |倒序浏览
目的:要将文本中每行的时间字段,如'20100510161212'替换为to_date('20100510161212','yyyymmddhh24Miss')

文本如下:
insert into info values('23399','136.2.2.2','132.1.4.122','NIC_20100329.0001','4096','20100510161212','20100510161214');
insert into info values('23400','136.2.2.2','132.1.4.122','NIC_20100328.0001','4096','20100510161212','20100510161214');
insert into info values('23401','136.2.2.2','132.1.4.122','NIC_20100328.0001','4096','20100510161212','20100510161214');

替换后的文本:
insert into info values('23399','136.2.2.2','132.1.4.122','NIC_20100329.0001','4096',to_date('20100510161212','yyyymmddhh24Miss'),to_date('20100510161214','yyyymmddhh24Miss'));
insert into info values('23400','136.2.2.2','132.1.4.122','NIC_20100328.0001','4096',to_date('20100510161212','yyyymmddhh24Miss'),to_date('20100510161214','yyyymmddhh24Miss'));
insert into info values('23401','136.2.2.2','132.1.4.122','NIC_20100328.0001','4096',to_date('20100510161212','yyyymmddhh24Miss'),to_date('20100510161214','yyyymmddhh24Miss'));

PS:文本中时间字段的位置可能不同,比如这个文本,以“,”为分隔符,时间字段是第6,7两个字段。可能另外一个文本是在2,3,4字段。

论坛徽章:
0
2 [报告]
发表于 2010-05-13 15:46 |只看该作者
说明一下,每个文本,我是可以根据文件名判断出,时间字段是分布在哪几个位置。

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
3 [报告]
发表于 2010-05-13 15:49 |只看该作者

  1. sed "s/\('[0-9]\{14\}'\)/to_date(\1,'yyyymmddhh24Miss')/g" urfile
复制代码

论坛徽章:
0
4 [报告]
发表于 2010-05-13 15:51 |只看该作者

  1. sed -r "s#'[0-9]{14}'#to_date(&,'yyyymmddhh24Miss')#g" FILE
复制代码

论坛徽章:
0
5 [报告]
发表于 2010-05-13 15:55 |只看该作者
楼上两位的方法,如果其中也有一个非时间字段也是14位的数字,不就歇菜了。。

论坛徽章:
0
6 [报告]
发表于 2010-05-13 15:57 |只看该作者
  1. awk -F"," 'BEGIN{OFS=","}NF >=7{$6="to_date("$6",'\''yyyymmddhh24Miss'\'')"; gsub(/\)|;/,"",$7); $7="to_date("$7",'\''yyyymmddhh24Miss'\'');";}1' file
复制代码
第 6,7个是日期的

论坛徽章:
0
7 [报告]
发表于 2010-05-13 15:59 |只看该作者
回复 2# beauty2003


你可以根据文件名判断出时间字段分布在哪个位置,但是你不告诉他们,那他们只能这样根据字段长度来判断。

论坛徽章:
0
8 [报告]
发表于 2010-05-13 16:00 |只看该作者
回复 5# beauty2003
你给的例子里并没有这样的情况,也没有说明怎么判断时间位置,歇菜也怪不得我们呀…… - -

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
9 [报告]
发表于 2010-05-13 16:02 |只看该作者
回复 5# beauty2003


你的真实数据里面有这样的例子么?贴出来看看?

论坛徽章:
0
10 [报告]
发表于 2010-05-13 16:07 |只看该作者
回复  beauty2003
你给的例子里并没有这样的情况,也没有说明怎么判断时间位置,歇菜也怪不得我们呀……  ...
kwokcn 发表于 2010-05-13 16:00



比如说文件名中含有_10001,时间字段是在6,7字段。文件名中含有_10002,是在2,3,4字段。
我是想在配置文件里,搞个映射关系,比如
10001=6,7
10002=2,3,4
10003=1,5  这样的
但是在脚本里,只通过将位置参数传入,就可以实现,替换对应位置的值。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP