我有一个文本文件,其中包含数十万条记录。其中一个字段是日期字段。是否有任何方法可以根据日期字段对文件进行排序?
09-APR-12 04.08.43.632279000 AM
19-MAR-12 03.53.38.189606000 PM
19-MAR-12 03.56.27.933365000 PM
19-MAR-12 04.00.13.387316000 PM
19-MAR-12 04.04.45.168361000 PM
19-MAR-12 03.54.32.595348000 PM
27-MAR-12 10.28.14.797580000 AM
28-MAR-12 12.28.02.652969000 AM
27-MAR-12 07.28.02.828746000 PM
字符串
输出应为
19-MAR-12 03.53.38.189606000 PM
19-MAR-12 03.54.32.595348000 PM
19-MAR-12 03.56.27.933365000 PM
19-MAR-12 04.00.13.387316000 PM
19-MAR-12 04.04.45.168361000 PM
27-MAR-12 10.28.14.797580000 AM
27-MAR-12 07.28.02.828746000 PM
28-MAR-12 12.28.02.652969000 AM
09-APR-12 04.08.43.632279000 AM
型
我尝试使用sort命令对日期进行排序(将日期字段作为字符串),但它没有给出正确的输出。
5条答案
按热度按时间nwsw7zdq1#
Chronicle的解决方案很接近,但忽略了AM/PM的区别,将
27-MAR-12 07.28.02.828746000 PM
排序在27-MAR-12 10.28.14.797580000 AM
之前。这可以修改:字符串
但这仍然是非常脆弱的。将日期转换为纪元时间并进行数字比较会更好。
bogh5gae2#
试试这个:
Input.txt
字符串
验证码
型
输出
型
koaltpgm3#
Decorate-Sort-Undecorate习惯用法适用于任何awk、任何sort和任何cut:
字符串
如果你不确定这是如何工作的,看看awk命令的输出,它在cut(undecorates)再次删除它之前,将键时间戳添加到(装饰)sort操作的输入:
型
注意它会按照所需的顺序进行排序。
s1ag04yj4#
此脚本以纳秒分辨率按纪元时间排序:
字符串
lnlaulya5#
你可以使用date,这通常可能是一个不错的主意,特别是如果你不需要担心微秒的话,否则你可能会剪掉微秒,并将其作为次要的排序字段进行排序。
字符串