免费注册 查看新帖 |

Chinaunix

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

求助:如何将文本文件中的时间字段进行调整 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-06 22:49 |只看该作者 |倒序浏览
有700来个文件,每个文件都需要修改。

一个文件多条记录.
每个记录用逗号隔开.
格式如下:
124321,234324,32423423,2011/05/06 10:00:00,2011/05/06 09:20:00,234,23
124321,234324,32423423,2011/05/06 12:00:00,2011/05/06 12:10:00,234,23

1、如第1个时间字段大于第2个时间字段,则修改第2个时间字段加8个小时。
如:
124321,234324,32423423,2011/05/06 10:00:00,2011/05/06 09:20:00,234,23
改成:
124321,234324,32423423,2011/05/06 10:00:00,2011/05/06 17:20:00,234,23

2、如第1个时间字段小于或等于第2个时间字段,则同时将第1个时间字段和第2个时间字段加8个小时。
如:
124321,234324,32423423,2011/05/06 12:00:00,2011/05/06 12:10:00,234,23
改成:
124321,234324,32423423,2011/05/06 20:00:00,2011/05/06 20:10:00,234,23

不涉及转天.

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
2 [报告]
发表于 2011-05-07 00:15 |只看该作者
本帖最后由 yinyuemi 于 2011-05-07 00:19 编辑

回复 1# 刘宇翔
  1. $ echo '124321,234324,32423423,2011/05/06 10:00:00,2011/05/06 09:20:00,234,23
  2. 124321,234324,32423423,2011/05/06 12:00:00,2011/05/06 12:10:00,234,23' |
  3. awk  '
  4. function t(x) {y=sprintf ("%02d",x+8);return y}
  5. {split($2,a,":");split($3,b,":")
  6. {if(a[1]==b[1]) {print $1,t(a[1])":"a[2]":"a[3],t(b[1])":"b[2]":"b[3]}
  7. else {if(a[1]>b[1]) {print $1,$2,t(b[1])":"b[2]":"b[3]}}}}'

  8. 124321,234324,32423423,2011/05/06 10:00:00,2011/05/06 17:20:00,234,23
  9. 124321,234324,32423423,2011/05/06 20:00:00,2011/05/06 20:10:00,234,23
复制代码

论坛徽章:
0
3 [报告]
发表于 2011-05-07 00:21 |只看该作者
2011/05/06
这个日期,需不需要比较的?
还是前后都一样的?

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
4 [报告]
发表于 2011-05-07 00:42 |只看该作者
回复 3# xiaopan3322


    似乎不需要,lz说不涉及转天

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

论坛徽章:
0
6 [报告]
发表于 2011-05-07 01:21 |只看该作者
本帖最后由 shplpy 于 2011-05-07 01:24 编辑
有700来个文件,每个文件都需要修改。

一个文件多条记录.
每个记录用逗号隔开.
格式如下:
124321,234 ...
刘宇翔 发表于 2011-05-06 22:49



下面这个可以跨日期,就是麻烦点
while read line;do

        time1=`echo $line|awk -F, '{print $4}'`
        time2=`echo $line|awk -F, '{print $5}'`
        time1_str=`date -d "$time1" +%s`
        time2_str=`date -d "$time2" +%s`
        add=$((8*3600))

        if [ $time1_str -gt $time2_str ];then
                time2_str=$((time2_str+add))
                time2_=`date -d "@$time2_str" "+%Y/%m/%d %H:%M:%S"`
                echo $line|sed -n "s#$time2#$time2_#p"
        else
                time1_str=$((time1_str+add))
                time2_str=$((time2_str+add))
                time1_=`date -d "@$time1_str" "+%Y/%m/%d %H:%M:%S"`
                time2_=`date -d "@$time2_str" "+%Y/%m/%d %H:%M:%S"`
                echo $line|sed -n "s#$time1#$time1_#;s#$time2#$time2_#p"
        fi
done <<<'124321,234324,32423423,2011/05/06 10:00:00,2011/05/06 17:20:00,234,23
124321,234324,32423423,2011/05/06 20:00:00,2011/05/06 20:10:00,234,23'

结果:
124321,234324,32423423,2011/05/06 18:00:00,2011/05/07 01:20:00,234,23
124321,234324,32423423,2011/05/07 04:00:00,2011/05/07 04:10:00,234,23
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP