bash - 在unix中排序日期字段

标签 bash shell unix sorting

我有一个包含数十万条记录的文本文件。其中一个字段是日期字段。 有什么方法可以根据日期字段对文件进行排序吗?

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 命令对日期进行排序(将日期字段作为字符串),但它没有给出正确的输出。

最佳答案

Chronicle 的解决方案很接近,但遗漏了上午/下午的区别,将 27-MAR-12 07.28.02.828746000 PM 排在 27-MAR-12 10.28.14.797580000 AM 之前.这可以修改:

sort -t- -k 3.1,3.2 -k 2M -k 1n -k 3.23,3.24

但这仍然很脆弱。将日期转换为纪元时间并进行数值比较会好得多。

关于bash - 在unix中排序日期字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11536368/

相关文章:

linux - SSH 持久连接超时

linux - sed 内联替换特定行号处的特定列号值

linux - 在目录中查找重复的文件名(不指定确切的文件名)

c - 实现系统调用而不显式调用它们

linux - unix awk 命令没有列出多个匹配的模式

linux - 我们如何在 Bash 中获得两个数组的并集?

linux - cat pipe awk 操作与文件上 awk 命令的比较

c++ 用于unix命令行操作

bash - "Reading"ffmpeg录制过程中的屏幕

java - java中如何检查shell脚本是否执行成功