免费注册 查看新帖 |

Chinaunix

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

[文本处理] 时间日期 好 乱 啊 [复制链接]

论坛徽章:
3
15-16赛季CBA联赛之八一
日期:2017-12-29 13:06:2315-16赛季CBA联赛之天津
日期:2018-08-08 17:39:4619周年集字徽章-年
日期:2019-12-25 22:50:31
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2019-10-08 20:02 |只看该作者 |倒序浏览
前些日子要加5000个好友




时间日期搞乱了, 现在把时间排序   按原来发生次序  核心就是还原时间顺序    多谢大家.......................
cat file

00:00:00 October 06 2017   ok
00:00:00 October 06 2017   no
00:00:00 October 06 2016   ok
00:00:00 October 06 2016   no
00:00:01 September 25 2018   ok
00:00:01 September 25 2018   no
00:00:04 November 05 2018   ok
00:00:04 November 05 2014   no
00:00:05 December 07 2018   ok
00:00:05 December 07 2018   no
17:45:51 October 26 2018   ok
17:45:51 October 26 2018   no
17:45:51 September 30 2018   ok
17:45:51 September 30 2018   no
17:45:52 October 01 2018   ok
17:45:52 October 01 2018   no
00:00:05 November 29 2018   ok
00:00:05 November 29 2018   no
00:00:06 October 07 2018   ok
00:00:06 October 07 2018   no
00:00:10 November 20 2018   ok
00:00:10 November 20 2018   no
00:00:11 October 26 2018   ok
00:00:11 October 26 2018   no
17:45:27 November 26 2018   ok
17:45:27 November 26 2018   no
17:45:28 December 13 2018   ok
17:45:28 December 13 2018   no
17:45:28 November 06 2018   ok
17:45:28 November 06 2018   no
20:05:58 November 29 2018   ok
20:05:58 November 29 2018   no
20:05:58 October 11 2018   ok
20:05:58 October 11 2018   no
20:05:58 September 20 2018   ok
20:05:58 September 20 2018   no
20:05:58 September 21 2018   ok
20:05:58 September 21 2018   no
17:45:28 November 26 2010   ok
17:45:28 November 26 2018   no
20:05:55 December 08 2017   ok
20:05:55 December 08 2018   no
23:44:12 September 18 2018   ok
23:44:12 September 18 2018   no
20:05:55 October 25 2018   ok
20:05:55 October 25 2018   no
17:45:29 November 26 2018   ok
17:45:29 November 26 2018   no
17:45:50 October 26 2018   ok
17:45:50 October 26 2018   no
17:45:50 September 28 2018   ok
17:45:50 September 28 2018   no
17:45:51 November 04 2018   ok
17:45:51 November 04 2019   no
17:45:51 November 06 2018   ok
17:45:51 November 06 2018   no
17:45:51 November 04 2019   no
17:45:51 November 06 2018   ok




论坛徽章:
0
2 [报告]
发表于 2019-10-08 23:20 |只看该作者
  1. #!/usr/bin/awk -f
  2. #

  3. $0!~/^$/{
  4.   "date -d \042"$1" "$2" "$3" "$4"\042 +%s" | getline a
  5.   b[NR" "$0]=a
  6.   close("date -d \042"$1" "$2" "$3" "$4"\042 +%s")
  7. }

  8. END{
  9.   PROCINFO["sorted_in"]="@val_num_asc"
  10.   for(i in b)
  11.     {sub(/^\S+\s+/,"",i);print i}
  12. }


  13. #GNU Awk 4.0.2
复制代码

论坛徽章:
3
15-16赛季CBA联赛之八一
日期:2017-12-29 13:06:2315-16赛季CBA联赛之天津
日期:2018-08-08 17:39:4619周年集字徽章-年
日期:2019-12-25 22:50:31
3 [报告]
发表于 2019-10-09 13:51 |只看该作者
回复 2# jzsjm1002

Thanks
看起来好复杂...

论坛徽章:
0
4 [报告]
发表于 2019-10-09 15:21 |只看该作者
回复 3# aaaa_123

只是将行的前面段转成时间戳 对时间戳进行排序
  1. date -d '17:45:51 November 06 2018' +%s
  2. 1541544351
复制代码


论坛徽章:
3
15-16赛季CBA联赛之八一
日期:2017-12-29 13:06:2315-16赛季CBA联赛之天津
日期:2018-08-08 17:39:4619周年集字徽章-年
日期:2019-12-25 22:50:31
5 [报告]
发表于 2019-10-09 16:20 |只看该作者
本帖最后由 aaaa_123 于 2019-10-09 16:21 编辑

回复 4# jzsjm1002 Thanks.....

嗯,具体正确 但是test工作过程发现慢一些,   拿500mb.log来test要等很久   还有一个5GB.log要排队

评分

参与人数 1可用积分 +10 收起 理由
飘絮絮絮丶 + 10 赞一个!

查看全部评分

论坛徽章:
0
6 [报告]
发表于 2019-10-09 16:59 |只看该作者
回复 5# aaaa_123

有一个close()操作是会慢很多,我测试过百M文件,有close()操作执行时间在半小时到1小时之间,
5G文件 你只有放到后台去运行了

评分

参与人数 1可用积分 +10 收起 理由
飘絮絮絮丶 + 10 赞一个!

查看全部评分

论坛徽章:
3
15-16赛季CBA联赛之八一
日期:2017-12-29 13:06:2315-16赛季CBA联赛之天津
日期:2018-08-08 17:39:4619周年集字徽章-年
日期:2019-12-25 22:50:31
7 [报告]
发表于 2019-10-09 17:24 |只看该作者
本帖最后由 aaaa_123 于 2019-10-09 17:27 编辑

回复 6# jzsjm1002

我测试10MB1小时多

改天用32核CPU试试

论坛徽章:
3
15-16赛季CBA联赛之八一
日期:2017-12-29 13:06:2315-16赛季CBA联赛之天津
日期:2018-08-08 17:39:4619周年集字徽章-年
日期:2019-12-25 22:50:31
8 [报告]
发表于 2019-10-09 17:26 |只看该作者
没有其它办法了吗

论坛徽章:
3
15-16赛季CBA联赛之八一
日期:2017-12-29 13:06:2315-16赛季CBA联赛之天津
日期:2018-08-08 17:39:4619周年集字徽章-年
日期:2019-12-25 22:50:31
9 [报告]
发表于 2019-10-09 21:15 |只看该作者
现在怎么这么冷清了.......................

论坛徽章:
8
2016科比退役纪念章
日期:2018-10-24 08:24:0115-16赛季CBA联赛之北控
日期:2019-03-12 14:34:562016科比退役纪念章
日期:2019-04-01 10:33:0915-16赛季CBA联赛之山东
日期:2019-04-17 12:46:3215-16赛季CBA联赛之广夏
日期:2019-05-09 16:40:4015-16赛季CBA联赛之广夏
日期:2019-10-10 15:33:4015-16赛季CBA联赛之辽宁
日期:2019-10-15 08:37:0615-16赛季CBA联赛之北控
日期:2021-03-30 15:53:34
10 [报告]
发表于 2019-10-10 09:50 |只看该作者
二楼的  date 转换后再排序 是一个办法,我也测试了。但发现有两个问题,第一个速度比较慢,楼主的示例文件在我的电脑上跑出结果大概需要15秒。第二个,排序的结果不是稳定的,即如果两个时间值相同时,和原始次序不太一样。
我一开始想用sort 对原来的字符串 直接排序,月份的排序是关键, sort --help 一看它有-M 选项 支持月份排序,但在我的电脑上试了 -M 选项不起作用的,不知是只支持JAN 这种三字符的月份还是其它的原因。
后来想想还是上Python**,且python的sort是稳定的排序。

仅供参考,示例文件跑完大概在0.3秒,大文件未测试,不知会如何。
  1. #!/usr/bin/python3

  2. from enum import Enum

  3. class Month(Enum):
  4.     (January,February,March,April,May,June,
  5.         July,August,September,October,November,December) = range(1,13)

  6. with open("1.txt","r",encoding="utf-8") as f:
  7.     s = (line.split() for line in f)
  8.     res = sorted(s,key=lambda line: (line[3],Month[line[1]].value,line[2],line[0])) #按 年,月,日,时间 排序
  9. with open("sorted.txt","w",encoding="utf-8") as fw:
  10.     for line in res:
  11.         fw.writelines("{}\n".format(" ".join(line)))
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP