PowerShellを使ってCSVファイルのデータをグループごとに分けてファイル出力します。グループリスト取得→グループごとにファイル出力という流れになります。今回はやや複雑な処理となりますのでスクリプトファイル(*.ps1)を作って実行します。
実行環境:Windows 11 Home, Powershell 7.4.1
データの準備
以下のようなCSVファイル(C:\CSV\MORTOR_CYCLE.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をファイル出力処理に使います。
オプションの -NoElement を付けないとグループに含まれるデータが含まれます。
以下のようなスクリプトでも同じ結果が得られます。必要に応じて使い分けてください。
$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
(2) メーカーごとのCSVファイルがファイル出力されました。