按[M] M / [D] D / YYYY对大文件进行排序

时间:2014-03-14 19:02:30

标签: linux sorting date date-sorting

我有这些大的制表符分隔的文本文件,我想按日期字段(第17个字段)排序。问题是日期的格式为[M] M / [D] D / YYYY,这意味着没有前导零,所以日期可以是:

2013年3月3日, 2014年4月17日, 2013年12月4日

是否可以使用sort命令执行此操作?我无法找到一个考虑没有前导零的示例。

作为一个说明,我尝试将日期字段重新计算为某个日期的天数,然后对其进行排序。这有效,但执行此额外步骤所需的读/写需要很长时间。

2 个答案:

答案 0 :(得分:0)

如果日期在行的开头:

sort -n -t/ -k3,3 -k1,1 -k2,2

使用--debug选项对可用的帮助进行排序

答案 1 :(得分:0)

以下内容为每行添加YYYYMMDD前缀,然后再将其传递给sort,然后删除添加的字符。

<file.in perl -pe'
   $_ = (
      m{^(?:[^\t]*\t){16}(\d+)/(\d+)/(\d+)\t}
         ? sprintf("%04d%02d%02d", $3, $1, $2)
         : " " x 8
   ) . $_;
' | sort | cut -b 9- >file.out