同一の値をグループ化してその中でソートしたい


同時刻の中で逆順化されているログ

どういうわけかわからんのですが、「同時刻の中で逆順化されているログ」(?)が
手元に来ました。こういう風なものです↓↓↓。

log.csv

Num Time Contents
1 10:00 A
2 11:00 C
3 11:00 B
4 12:00 F
5 12:00 E
6 12:00 D
7 13:00 J
8 13:00 I
9 13:00 H
10 13:00 G

ソートに失敗しているのかロギングの設定がおかしいのか、原因はさておき、
「A→J」の順にしないと、ログの正しい順番は把握できない様子。

これをサラッと、何とかしたい。

同じ値の奴でgroupして、その中でsort
$Log = Import-Csv .\log.csv                        # log.csvをインポート
$GroupByTime = $Log | Group-Object -Property Time  # Timeで「同時刻グループ」を作る

<# $GroupByTime
Count Name  Group
----- ----  -----
    1 10:00 {@{Num=1; Time=10:00; Contents=A}}
    2 11:00 {@{Num=2; Time=11:00; Contents=B}, @{Num=3; Time=11:00; Contents=C...
    3 12:00 {@{Num=4; Time=12:00; Contents=D}, @{Num=5; Time=12:00; Contents=E...
    4 13:00 {@{Num=7; Time=13:00; Contents=G}, @{Num=8; Time=13:00; Contents=H...
#>

# 「同時刻グループ」内を、Numで逆順にする(Numは文字列なので数値にキャスト)
$GroupByTime | %{$_.Group | Sort-Object -Descending {[int]$_.Num}}

結果。

Num Time Contents
1 10:00 A
3 11:00 B
2 11:00 C
6 12:00 D
5 12:00 E
4 12:00 F
10 13:00 G
9 13:00 H
8 13:00 I
7 13:00 J

あとはNumを「1→10」に書き換えれば正しい順番のログになるはず。
同一の値をグループ化して、その中で順序入れ替えるとか、いじくるにはこの方法が楽かなと思いました。