我有这个代表日历的文件。每个文件都有准确的日期和时间,然后是事件名称和注释。
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
我需要打印按正确顺序排序的事件。
我尝试过使用grep
andawk
但它不能正常工作。我能做些什么?
答案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