Shell
有沒有辦法在行上解析和排序日期?
如果您的文件中的行按此順序排序(從最舊到最近):
<2021-05-10 Mon> <2021-06-04 Fri> <2021-07-04 Sun> <2021-08-01 Sun> ... <2021-05-10 Mon> <2021-06-04 Fri> <2021-07-22 Thu> <2021-08-11 Wed> ... <2021-05-10 Mon> <2021-06-04 Fri> <2021-07-18 Sun> <2021-08-01 Sun> ... ...
是否有任何 shell 實用程序僅用於解析和排序日期順序(從最近到最舊):
<2021-08-01 Sun> <2021-07-04 Sun> <2021-06-04 Fri> <2021-05-10 Mon> ... <2021-08-11 Wed> <2021-07-22 Thu> <2021-06-04 Fri> <2021-05-10 Mon> ... <2021-08-01 Sun> <2021-07-18 Sun> <2021-06-04 Fri> <2021-05-10 Mon> ... ...
通用方法也受到讚賞。
另一種
perl
方法:$ perl -lpe '$_ = join " ", sort {$b cmp $a} /<.*?>/g' < file <2021-08-01 Sun> <2021-07-04 Sun> <2021-06-04 Fri> <2021-05-10 Mon> <2021-08-11 Wed> <2021-07-22 Thu> <2021-06-04 Fri> <2021-05-10 Mon> <2021-08-01 Sun> <2021-07-18 Sun> <2021-06-04 Fri> <2021-05-10 Mon>
這會提取
<...>
封閉的字元串,對它們進行反向排序(使用字節到字節的字元串比較,這對於那些 YYYY-MM-DD 日期應該可以正常工作),而不是列印它們並用一個空格連接。這確實會丟棄輸入中的任何其他內容(包括額外的間距或未包含在 中的文本<...>
)。在這裡,由於輸入是按時間順序排列的,您也可以使用
reverse
它按時間倒序排列:perl -lpe '$_ = join " ", reverse /<.*?>/g'