免费注册 查看新帖 |

Chinaunix

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

[文本处理] 请教个时间累加的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-04-24 23:07 |只看该作者 |倒序浏览
1.txt:
3.3.3.3 20121223015959 /xxx
5.5.5.5 20121223042913 /xxx
想把中间的日期 2012-12-23,在小时部分增加12小时,最后变成
3.3.3.3 20121223135959 /xxx
5.5.5.5 20121223162913 /xxx

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
2 [报告]
发表于 2013-04-24 23:29 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2013-04-24 23:49 |只看该作者
本帖最后由 心若寒江雪 于 2013-04-24 23:50 编辑

[root@localhost job]# cat file
3.3.3.3 20121223015959 /xxx
5.5.5.5 20121223042913 /xxx
5.5.5.5 20121223122913 /xxx
[root@localhost job]# awk '{var=substr($2,9,2)+12;if(var>24){var=var-24}else if(var==24)var="00";sub(/20121223../,20121223var,$2)}{print $0}' file
3.3.3.3 20121223135959 /xxx
5.5.5.5 20121223162913 /xxx
5.5.5.5 20121223002913 /xxx
[root@localhost job]#

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
4 [报告]
发表于 2013-04-25 10:32 |只看该作者
  1. [seesea@UC ~]$ cat file
  2. 3.3.3.3 20121223015959 /xxx
  3. 5.5.5.5 20121223042913 /xxx
  4. 6.6.6.6 20121223222913 /xxx
  5. 7.7.7.7 20121231222913 /xxx

  6. [seesea@UC ~]$ sed -r 's/([^ ]* )(........)(..)(..)(..)(.*)/echo \1$(date -d"\2 \3:\4:\5 +12 hours" +"%Y%m%d%H%M%S")\6/e' file
  7. 3.3.3.3 20121223104759 /xxx
  8. 5.5.5.5 20121223131713 /xxx
  9. 6.6.6.6 20121224071713 /xxx
  10. 7.7.7.7 20130101071713 /xxx
复制代码

论坛徽章:
0
5 [报告]
发表于 2013-04-25 13:27 |只看该作者
明白了,但是如果log是:
1.1.1.1 20120523045959 /xxx/xxx.do?product=xxx&xxx=8.6 - "xxxx/1.6.0 (Linux; U; xxxx1.0.4; xxxBuild/xxx)"
结果会有点问题,还没发现哪不对 大家帮给分析分析
sed -r 's/([^ ]* )(........)(..)(..)(..)(.*)/echo \1$(date -d "\2 \3:\4:\5 12 hours" +"%Y%m%d%H%M%S")\6/e' log

sh: -: command not found
1.1.1.1 20120523165959 /xxx/xxx.do?product=xxx

刚查了下sed里12 hours前面带加号,时间就不是多12小时了。

论坛徽章:
0
6 [报告]
发表于 2013-04-25 16:34 |只看该作者
本帖最后由 ABrthur 于 2013-04-25 16:34 编辑

已解决,多谢大家。

命令如下 )
  1. sed -nr 'h;s#^([^ ]* )(.{8})(..)(..)(..)(.*)$#echo -n \1 $(date -d "\2 \3:\4:\5 12hours" +"%Y%m%d%H%M%S")#e;G;s/\n[^ ]* .{14}//p' log
复制代码

论坛徽章:
0
7 [报告]
发表于 2013-04-25 17:17 |只看该作者
回复 3# 心若寒江雪

应该是这样
awk '{var=substr($2,9,2)+12;if(var>=24 && var<34) {var=0(var-24)} else if(var>=34) {var=var-24}; sub(/20121223../,20121223var,$2)}{print $0}' test1


   

论坛徽章:
0
8 [报告]
发表于 2013-04-26 17:11 |只看该作者
回复 7# qinjinq


超过24小时的话,日期还要增加的。
   

论坛徽章:
0
9 [报告]
发表于 2013-04-26 17:55 |只看该作者
恩,LS两位说的对。只是我之前把需要修改的日志copy出来了。
的确我执行的sed命令会出现12:00 +12小时后,天数会变成第二天0:00.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP