我有一个以下格式的文本文件,我需要根据日期对行进行排序。有没有一些简单的方法可以做到这一点(最好是在 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 字段)进行排序,然后对第三列(天)进行排序。
更多信息可以找到这里。