免费注册 查看新帖 |

Chinaunix

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

[日期时间] 处理一个文件内时间差转换成天数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-06-30 15:43 |只看该作者 |倒序浏览

想将该文件的第四列 的时间 减去第三列的时间  时间差变换成天数 输出到第五列中,菜鸟求指导,研究了好久  都没研究成功

论坛徽章:
7
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:18程序设计版块每日发帖之星
日期:2015-08-09 06:20:00每日论坛发贴之星
日期:2015-08-09 06:20:00程序设计版块每日发帖之星
日期:2015-08-22 06:20:00程序设计版块每日发帖之星
日期:2015-08-27 06:20:00
2 [报告]
发表于 2015-06-30 16:10 |只看该作者
那个本来应该有很多人会玩玩的,结果你给了个图~~~换成代码吧~~

论坛徽章:
0
3 [报告]
发表于 2015-06-30 16:41 |只看该作者
回复 2# tuyajie

[ismp@SMP11 zhong]$
[ismp@SMP11 zhong]$ awk -F '|' '{print$1"|"$2"|"$3"|"$4}' 1.txt
13400041414|18702652237|20150302131949|20150302132312
13400041414|15052124614|20150107111304|20150302131709
13400041414|18279684920|20150302133159|20150313092141
13400041414|14779568524|20150316062001|20150316063117
13400041414|15103434017|20150119152514|20150313092146
13400041414|18479343074|20150316061904|20150316062042
13400041414|13405761414|20150316063544|20150316063639
13400041414|18870680194|20150316060912|20150316061428
13400041414|14762010034|20150105110754|20150115104932
13400041414|15152494334|20141230100609|20141230101153
13400643973|13400644513|20150515154622|20150515155231
13400644913|13489937792|20150519111937|20150609144721

文件类似于这样的  多谢


   

论坛徽章:
9
寅虎
日期:2013-12-02 12:49:22巨蟹座
日期:2014-07-18 18:13:34卯兔
日期:2014-07-25 14:43:08子鼠
日期:2014-07-26 10:10:51酉鸡
日期:2014-07-31 15:09:562015亚冠之本尤德科
日期:2015-05-19 09:27:382015亚冠之卡尔希纳萨夫
日期:2015-06-20 10:30:212015亚冠之阿尔纳斯尔
日期:2015-07-01 20:46:062015亚冠之城南
日期:2015-07-15 21:12:00
4 [报告]
发表于 2015-06-30 16:58 |只看该作者
本帖最后由 lifayi2008 于 2015-06-30 17:08 编辑
  1. awk 'function pr(b){return substr(b,0,4)" "substr(b,5,2)" "substr(b,7,2)" "substr(b,9,2)" "substr(b,11,2)" "substr(b,13,2)}BEGIN{FS=OFS="|"}{a=mktime(pr($4))-mktime(pr($3));$5=int(a/86400)"d"int(a%86400/3600)"h"int(a%86400%3600/60)"m"a%60"s"}1' test.txt
复制代码
笨办法

论坛徽章:
0
5 [报告]
发表于 2015-06-30 17:16 |只看该作者
回复 4# lifayi2008
哈哈  多谢了,笨办法总比没有办法好,网友还是强大的

   

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
6 [报告]
发表于 2015-06-30 20:57 |只看该作者
本帖最后由 haooooaaa 于 2015-07-01 08:07 编辑

回复 1# 毛线浅爱


这个是错的.... 正确的在后面

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
7 [报告]
发表于 2015-06-30 22:50 |只看该作者
  1. import datetime

  2. with open('input.txt') as f:
  3.     for each_line in f:
  4.         each_line = each_line.rstrip()
  5.         fields = each_line.split('|')
  6.         d1 = datetime.datetime.strptime(fields[2], '%Y%m%d%H%M%S')
  7.         d2 = datetime.datetime.strptime(fields[3], '%Y%m%d%H%M%S')
  8.         diff = d2 - d1
  9.         fields.append(str(diff.days))
  10.         print '|'.join(fields)
复制代码
result:
  1. 13400041414|18702652237|20150302131949|20150302132312|0
  2. 13400041414|15052124614|20150107111304|20150302131709|54
  3. 13400041414|18279684920|20150302133159|20150313092141|10
  4. 13400041414|14779568524|20150316062001|20150316063117|0
  5. 13400041414|15103434017|20150119152514|20150313092146|52
  6. 13400041414|18479343074|20150316061904|20150316062042|0
  7. 13400041414|13405761414|20150316063544|20150316063639|0
  8. 13400041414|18870680194|20150316060912|20150316061428|0
  9. 13400041414|14762010034|20150105110754|20150115104932|9
  10. 13400041414|15152494334|20141230100609|20141230101153|0
  11. 13400643973|13400644513|20150515154622|20150515155231|0
  12. 13400644913|13489937792|20150519111937|20150609144721|21
复制代码

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
8 [报告]
发表于 2015-06-30 22:52 |只看该作者
本帖最后由 yestreenstars 于 2015-06-30 23:00 编辑

回复 6# haooooaaa

这结果明显是不对的……

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
9 [报告]
发表于 2015-07-01 06:55 |只看该作者
回复 1# 毛线浅爱

>>想将该文件的第四列 的时间 减去第三列的时间  时间差变换成天数 输出到第五列中...

What You Think Is What You Code(WYTIWYC)

$ awk 'function diffday(s,e){return(int((sec(e)-sec(s))/86400))}function sec(str){gsub(/../,"& ",str);sub(/ /,"",str);return(mktime(str))}BEGIN{FS=OFS="|"}{$5=diffday($3,$4)}1' FILE
13400041414|18702652237|20150302131949|20150302132312|0
13400041414|15052124614|20150107111304|20150302131709|54
13400041414|18279684920|20150302133159|20150313092141|10
13400041414|14779568524|20150316062001|20150316063117|0
13400041414|15103434017|20150119152514|20150313092146|52
13400041414|18479343074|20150316061904|20150316062042|0
13400041414|13405761414|20150316063544|20150316063639|0
13400041414|18870680194|20150316060912|20150316061428|0
13400041414|14762010034|20150105110754|20150115104932|9
13400041414|15152494334|20141230100609|20141230101153|0
13400643973|13400644513|20150515154622|20150515155231|0
13400644913|13489937792|20150519111937|20150609144721|21

Note: https://www.gnu.org/software/gawk/manual/gawk.html#Time-Functions
mktime(datespec)
Turn datespec into a timestamp in the same formas is returned by systime().  It is similar to the function of thesame name in ISO C.  The argument, datespec, is a string of the form"YYYY MM DD HH MM SS [DST]".The string consists of six or seven numbers representing, respectively,the full year including century, the month from 1 to 12, the day of the monthfrom 1 to 31, the hour of the day from 0 to 23, the minute from 0 to59, the second from 0 to 60,53and an optional daylight-savings flag.

   

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
10 [报告]
发表于 2015-07-01 08:05 |只看该作者
本帖最后由 haooooaaa 于 2015-07-01 09:15 编辑

回复 8# yestreenstars


    谢谢, 没太仔细看.
  1. $ awk -F "|" '{m=$0;for(i=3;i<5;i++){gsub(/[0-9][0-9]/,"& ",$i);t[i]=mktime(gensub(" ","",1,$i))}printf("%s|%s\n",m,int((t[4]-t[3])/86400))}' 2.txt
  2. 13400041414|18702652237|20150302131949|20150302132312|0
  3. 13400041414|15052124614|20150107111304|20150302131709|54
  4. 13400041414|18279684920|20150302133159|20150313092141|10
  5. 13400041414|14779568524|20150316062001|20150316063117|0
  6. 13400041414|15103434017|20150119152514|20150313092146|52
  7. 13400041414|18479343074|20150316061904|20150316062042|0
  8. 13400041414|13405761414|20150316063544|20150316063639|0
  9. 13400041414|18870680194|20150316060912|20150316061428|0
  10. 13400041414|14762010034|20150105110754|20150115104932|9
  11. 13400041414|15152494334|20141230100609|20141230101153|0
  12. 13400643973|13400644513|20150515154622|20150515155231|0
  13. 13400644913|13489937792|20150519111937|20150609144721|21
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP