##同時刻の中で逆順化されているログ
どういうわけかわからんのですが、「同時刻の中で逆順化されているログ」(?)が
手元に来ました。こういう風なものです↓↓↓。
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」に書き換えれば正しい順番のログになるはず。
同一の値をグループ化して、その中で順序入れ替えるとか、いじくるにはこの方法が楽かなと思いました。