行が次の順序で並べ替えられたファイル(古いものから最新のものまで)がある場合:
<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/ $//