根据日期和时间对行进行排序

根据日期和时间对行进行排序

我有这个代表日历的文件。每个文件都有准确的日期和时间,然后是事件名称和注释。

06-12-2016,12:00,gym,leg day
05-04-2018,12:09,gym,hands
09-08-2019,13:08,movies,horror
05-04-2019,14:07,gym,hands
23-03-2018,16:47,dance class
25-04-2019,13:29,dance class
05-12-2017,14:45,songwriting

我需要打印按正确顺序排序的事件。

我尝试过使用grepandawk但它不能正常工作。我能做些什么?

答案1

我相信最简单的命令是

sort -t- -k3.1,3.4 -k2,2 file

这对第三个字段的四个字符进行排序,并通过对第二个字段进行排序来解决关系。如果仍然没有解决平局,则将通过从第一个字段开始比较所有其他字段来自动确定顺序。

请注意,所有排序都是按字母顺序完成的,因为数字是正整数,所以添加额外的n并不重要。

测试样品:

06-12-2016,12:00,gym,leg day
05-04-2018,12:09,gym,hands
09-08-2019,13:11,movies,horror
09-08-2019,13:09,movies,horror
09-08-2019,13:08,movies,horror
08-08-2019,13:09,movies,horror
05-04-2019,14:07,gym,hands
23-03-2018,16:47,dance class
25-04-2019,13:29,dance class
05-12-2017,14:45,songwriting

排序结果:

06-12-2016,12:00,gym,leg day
05-12-2017,14:45,songwriting
23-03-2018,16:47,dance class
05-04-2018,12:09,gym,hands
05-04-2019,14:07,gym,hands
25-04-2019,13:29,dance class
08-08-2019,13:09,movies,horror
09-08-2019,13:08,movies,horror
09-08-2019,13:09,movies,horror
09-08-2019,13:11,movies,horror

答案2

一种方法是手动挑选所有排序字段:

sort -t, -k 1.7,1.10n -k 1.4,1.5n -k 1.1,1.2n -k 2.1,2.2n -k 2.4,2.5n input

这会根据逗号分隔的字段拆分行,然后使用年、月、日、小时和分钟的位置进行数字排序。示例输出:

06-12-2016,12:00,gym,leg day
05-12-2017,14:45,songwriting
23-03-2018,16:47,dance class
05-04-2018,12:09,gym,hands
05-04-2019,14:07,gym,hands
25-04-2019,13:29,dance class
09-08-2019,13:08,movies,horror

相关内容