PowerShellは、Windowsをはじめとする多くの環境で使われている強力なスクリプト言語です。中でもSort-Object
コマンドレットは、データの並べ替えを行う上で非常に便利なツールです。ファイル一覧を日付順にソートしたり、CSVデータを数値で昇順・降順に並べ替えたりと、さまざまなシーンで活用できます。この記事では、Sort-Object
の基本的な使い方から、実践的な活用例までをわかりやすく解説します。PowerShell初心者の方も、日々の業務に活かしたい中級者の方も、ぜひ参考にしてください。
Sort-Objectとは何か?
Sort-Object
は、PowerShellのオブジェクト(データ)の並べ替えを行うためのコマンドレットです。構文としては非常にシンプルで、オブジェクトのパイプラインにSort-Object
を組み合わせることで、目的の順序で出力を制御できます。
Get-ChildItem | Sort-Object Name
この例では、カレントディレクトリのファイルとフォルダを名前順に並べ替えています。PowerShellではすべての出力がオブジェクトであるため、Sort-Object
は非常に汎用性の高いツールです。
基本的な構文とオプション
構文
Sort-Object [-Property] <String[]> [-Descending] [-Unique]
主なオプション
-Property
:並べ替えの対象とするプロパティ(列)を指定します。-Descending
:降順に並べ替えます(省略時は昇順)。-Unique
:重複を除外してユニークな値のみを出力します。
昇順・降順で並べ替える方法
Sort-Object
は、デフォルトで昇順に並べ替えられますが、-Descending
を指定することで降順にも対応可能です。
昇順(デフォルト)
Get-Process | Sort-Object CPU
CPU使用率が少ない順にプロセスを並べ替えます。
降順
Get-Process | Sort-Object CPU -Descending
今度は、CPU使用率が多い順に表示されます。負荷の高いプロセスを探すのに便利です。
複数のプロパティで並べ替え
複数の条件でソートしたい場合も、Sort-Object
は柔軟に対応してくれます。
Get-ChildItem | Sort-Object Extension, Length
この例では、ファイルの拡張子で並べ替えたあと、同じ拡張子内ではファイルサイズで昇順に並べ替えます。
ユニークな値だけを抽出する
重複データがある場合、-Unique
を使えば一意なデータのみを取得できます。
Get-Process | Sort-Object ProcessName -Unique
このコマンドは、プロセス名で重複を除外して一覧表示します。同じアプリケーションのプロセスが複数起動しているときに便利です。
CSVデータを並べ替える実践例
CSVファイルを取り扱う場合も、Sort-Object
は大活躍します。
Import-Csv "社員一覧.csv" | Sort-Object 年齢
この例では、CSV形式の社員データを年齢順に並べ替えます。-Descending
を加えれば、年長者順に表示できます。
ファイル情報を日付でソートする
ファイルの作成日や更新日時で並べ替えるのも一般的な用途の一つです。
Get-ChildItem | Sort-Object LastWriteTime -Descending
最新のファイルを上に表示したい場合に使います。ログファイルやバックアップファイルの管理に重宝します。
オブジェクトの比較とカスタムソート
プロパティに数値や日付などが混在している場合、思わぬ並べ替えミスが起こることがあります。その場合は、-Property
にスクリプトブロックを使ってカスタムソートが可能です。
Get-ChildItem | Sort-Object @{Expression = { $_.Length }; Descending = $true }
このようにハッシュテーブルでExpression
とDescending
を指定することで、より高度な並べ替えが可能になります。
ソート後の結果をファイルに保存する
並べ替えた結果をレポートなどに活用したいときは、Out-File
を組み合わせて保存できます。
Get-Process | Sort-Object CPU -Descending | Out-File "プロセス一覧.txt"
このようにすれば、ソート結果をそのままテキストファイルに出力できます。ログとして残したり、共有用に加工するのにも便利です。
パイプラインと組み合わせて効率化
Sort-Object
は、他のコマンドレットとパイプでつなぐことで真価を発揮します。例えば、次のような組み合わせが可能です。
Get-EventLog -LogName System | Where-Object {$_.EntryType -eq "Error"} | Sort-Object TimeGenerated -Descending | Select-Object -First 5
これは、Systemログの中でエラーのみを取り出し、新しい順に5件だけ表示するコマンドです。運用現場で非常に実用的な使い方です。
よくあるエラーと対処法
エラー1:プロパティ名のタイプミス
Sort-Object Lenght
このようにプロパティ名を間違えると、正しくソートされません。プロパティ名は正確に指定しましょう。
エラー2:数値と文字列が混在している
例えば、数値のように見えるが文字列扱いされている場合、期待通りに並ばないことがあります。型を変換してからソートするのがコツです。
Import-Csv data.csv | Select-Object @{Name="年齢";Expression={[int]$_.年齢}} | Sort-Object 年齢
まとめ:Sort-Objectを使いこなしてデータ処理を効率化しよう
Sort-Object
は、PowerShellにおける基本でありながら奥深い機能をもったコマンドレットです。昇順・降順、ユニークな値の抽出、複数条件での並べ替え、さらにはカスタムソートまで、多彩な使い方が可能です。
日々の業務でログの整理、CSVデータの加工、プロセス情報の抽出などを行う際に、Sort-Object
を活用することで、効率的で再現性のあるスクリプトが作成できます。ぜひこの記事を参考に、あなたのPowerShellスクリプトにSort-Object
を取り入れてみてください。