行の日付を解析してソートする方法はありますか?

行の日付を解析してソートする方法はありますか?

行が次の順序で並べ替えられたファイル(古いものから最新のものまで)がある場合:

<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> ... 
... 

1行で日付順(最新の項目から古い項目まで)を解析してソートするシェルユーティリティはありますか?

<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> ...
... 

一般的なアプローチも高く評価されます。

答え1

別の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'

答え2

(私の考えでは)次のようにすることができます。

perl -lpe '@F=split /</, $_ . " "; $_ = join "<", shift @F, sort {$b cmp $a} @F' sample.txt

短所:行の末尾にスペースが追加されます。 1つの修正は、$_ =~ s/ $//最後に以下を追加することです。

@F = split /</, $_ . " "; 
$_ = join "<", shift @F, sort {$b cmp $a} @F; 
$_ =~ s/ $//

関連情報