让我们
16:00_17/06/2022
12:31_10/05/2022
10:34_07/03/2023
11:17_12/04/2022
12:37_10/05/2022
我想按升序排列此输出以获得以下内容:
11:17_12/04/2022
12:31_10/05/2022
12:37_10/05/2022
16:00_17/06/2022
10:34_07/03/2023
我尝试过sort -t '_' -k2 -k1
,sort -t '/' -k3 -k2 -k1
但是得到的却是混乱的安排。
有人可以提出什么建议吗?
谢谢。
答案1
假设您的输入格式是 hour:minute_day-of-month/month/year
,那么一个方便的选项可能是dsort
从dateutils
包中使用:
$ dateutils.dsort --input-format='%H:%M_%d/%m/%Y' dates
11:17_12/04/2022
12:31_10/05/2022
12:37_10/05/2022
16:00_17/06/2022
10:34_07/03/2023
如果您需要使用普通的 GNU 来执行此操作sort
,那么只要字段具有固定宽度,那么您就可以使用扩展的F.C
(field.character)形式的键定义来将第一个/
-delimited 字段“拆分”为H:M
和d
并首先对后者进行排序,例如。
sort -t/ -k3,3 -k2,2 -k1.7,1.8 -k1.1,1.5 dates