タイムスタンプ配列があります。
arr[0]="04-Feb-2021-21-05-48"
arr[1]="18-Jan-2021-12-19-48"
arr[2]="25-Jan-2021-00-24-29"
arr[3]="26-Jan-2021-00-28-33"
arr[4]="04-Feb-2021-21-06-49"
arr[5]="18-Jan-2021-12-19-48"
arr[6]="25-Jan-2021-00-24-29"
arr[7]="26-Jan-2021-00-28-33"
この配列をソートし、次のコマンドを使用してタイムスタンプを新しい配列にソートしたいと思います。
IFS=$'\n' sorted=($(sort -r -t- -k2.1,2.3M <<<"${arr[*]}")); unset IFS
printf "[%s]\n" "${sorted[@]}"
この出力を得ましたが、望む結果ではありません。
[26-Jan-2021-00-28-33]
[26-Jan-2021-00-28-33]
[25-Jan-2021-00-24-29]
[25-Jan-2021-00-24-29]
[18-Jan-2021-12-19-48]
[18-Jan-2021-12-19-48]
[04-Feb-2021-21-06-49]
[04-Feb-2021-21-05-48]
代わりにタイムスタンプを降順に並べ替えたいと思います。
では、この結果をどのように取得できますか?
[04-Feb-2021-21-06-49]
[04-Feb-2021-21-05-48]
[26-Jan-2021-00-28-33]
[26-Jan-2021-00-28-33]
[25-Jan-2021-00-24-29]
[25-Jan-2021-00-24-29]
[18-Jan-2021-12-19-48]
[18-Jan-2021-12-19-48]
このバージョンのソートコマンドを試しましたが、そのうち何も機能しませんでした...
IFS=$'\n' sorted=($(sort -r -t- -k3.1,3.4 -k2.1,2.3M <<<"${arr[*]}")); unset IFS
IFS=$'\n' sorted=($(sort -r -t- -k2.1,2.3M <<<"${arr[*]}")); unset IFS
IFS=$'\n' sorted=($(sort -t- -k2.1,2.3M <<<"${arr[*]}")); unset IFS
修正する
月フィールドに基づいてタイムスタンプ配列を並べ替えるのではなく、タイムスタンプを降順に並べ替えたいことを明確にするために質問を更新しました。
乾杯。
ベストアンサー1
指定した列にのみ「reverse」を適用する場合に指定します。後ろにこれ-k
:
sort -t- -k2.1,2.3Mr
# ~