我有这些大的制表符分隔的文本文件,我想按日期字段(第17个字段)排序。问题是日期的格式为[M] M / [D] D / YYYY,这意味着没有前导零,所以日期可以是:
2013年3月3日, 2014年4月17日, 2013年12月4日
是否可以使用sort
命令执行此操作?我无法找到一个考虑没有前导零的示例。
作为一个说明,我尝试将日期字段重新计算为某个日期的天数,然后对其进行排序。这有效,但执行此额外步骤所需的读/写需要很长时间。
答案 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