根据日期对行进行排序

根据日期对行进行排序

我有一个以下格式的文本文件,我需要根据日期对行进行排序。有没有一些简单的方法可以做到这一点(最好是在 bash 中)?

2013-May-30     2
2013-May-21     10
2013-Jun-27     8
2013-Jun-18     9
2013-Jun-09     17
2013-May-20     21
2013-Jun-10     1
2013-Jun-01     2
2013-Aug-09     6
2013-Aug-08     5
2013-Aug-07     2
...

答案1

如果你告诉 GNUsort用不同的字符(-在你的情况下是破折号)分割字段,那么排序就很容易了:

$ sort -n -t"-" -k1 -k2M -k3 file.txt

例子

$ sort -n -t"-" -k1 -k2M -k3 file.txt
2013-May-20     21
2013-May-21     10
2013-May-30     2
2013-Jun-01     2
2013-Jun-09     17
2013-Jun-10     1
2013-Jun-18     9
2013-Jun-27     8
2013-Aug-07     2
2013-Aug-08     5
2013-Aug-09     6

参考

答案2

如果您的sort不是 GNU 排序并且不支持按月份名称排序,您需要将这些月份名称转换为您sort可以排序的名称:

sed 's/$/-Jan1Feb2Mar3Apr4May5Jun6Jul7Aug8Sep9Oct10Nov11Dec12/
     s/-\(...\)\(.*\)-.*\1\([0-9]*\)[^-]*$/-\3\1\2/' |
  sort -nt- -k1 -k2 -k3 |
  sed 's/-./-/'

答案3

就在这里。你可以这样做:

sort -k 2,2n -k 3
使用给定的列号对数据进行排序。选项 -k 2,2n -k 3 对每列进行排序。首先,它将对第二列(日期 mm 字段)进行排序,然后对第三列(天)进行排序。

更多信息可以找到这里

相关内容