LoginSignup
0
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-05-23

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

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

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」に書き換えれば正しい順番のログになるはず。
同一の値をグループ化して、その中で順序入れ替えるとか、いじくるにはこの方法が楽かなと思いました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0