PowerShellでCSVファイルのデータをグループごとに出力する

PowerShellを使ってCSVファイルのデータをグループごとに分けてファイル出力します。グループリスト取得→グループごとにファイル出力という流れになります。今回はやや複雑な処理となりますのでスクリプトファイル(*.ps1)を作って実行します。
実行環境:Windows 11 Home, Powershell 7.4.1

データの準備

以下のようなCSVファイル(C:\CSV\MORTOR_CYCLE.csv)を用意します。

CSV
CSV

スクリプトファイル作成

元となるCSVファイルからメーカーの一覧(グループリスト)を抽出して、メーカーごとのCSVファイルを出力するスクリプトファイルを作成します。

C:¥CSV¥export_csv.ps1

$file = "C:\CSV\MORTOR_CYCLE"
# メーカーを取得
$makers = Import-Csv $($file+".csv") | Group-Object -Property maker -NoElement
# 繰り返し
$makers | ForEach-Object {
  $maker_name = $_.Name
  # CSVファイル出力
  Import-Csv $($file+".csv") -Encoding utf8
   | Where-Object {$_.maker -eq $maker_name}
   | Export-Csv $($file+"_$maker_name.csv") -UseQuotes Never -Encoding utf8BOM
}

3行:メーカーの一覧を取得します。
  Group-Object -Property 項目名
5行:取得したメーカーの件数だけ処理を繰り返します。
6行:抽出条件となるメーカー名を変数に取得します。
8-10行:メーカー名を抽出条件としたファイル出力を行います。これは前回の記事で紹介しています。

Group-Objectで指定した項目を取得するところがポイントです。3行目の結果を画面出力すると以下のようにメーカーの一覧が取得されていることがわかります。この.Nameをファイル出力処理に使います。

PS確認

 オプションの -NoElement を付けないとグループに含まれるデータが含まれます。

PS確認

 以下のようなスクリプトでも同じ結果が得られます。必要に応じて使い分けてください。

$file = "C:\CSV\MORTOR_CYCLE"
# メーカーを取得
$makers = Import-Csv $($file+".csv") | Group-Object -Property maker
# 繰り返し
$makers | ForEach-Object {
  # CSVファイル出力
  $_.Group
   | Export-Csv $($file+"_"+$_.Name+".csv") -UseQuotes Never -Encoding utf8BOM
}

スクリプト実行と結果確認

(1) ターミナルからスクリプトファイルを実行します。
 > ./export_csv.ps1

PS実行

(2) メーカーごとのCSVファイルがファイル出力されました。

CSVファイル
CSV結果