PowerShellでCSVファイルを分割する

PowerShellでCSVファイルを一定の行数で分割します。分割した各ファイルにはヘッダー行を付加します。
実行環境:Windows 11 Home, Powershell 7.4.1

データの準備

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

CSV
CSV

スクリプト実行

ターミナルから10行ずつ分割するスクリプトを実行します。

スクリプト実行

(1) まず元ファイルからヘッダー行を取得します。
 > $file = "MORTOR_CYCLE"
 > $header = Get-Content $($file + ".csv") -Encoding utf8 | Select-Object -First 1

 ※ Select-Object -First 1 で最初の一行を取っているのがポイントです。

(2) 分割する時にジャマなので、ヘッダーなしのファイルを出力します。
 > Import-Csv $($file+".csv") -Encoding utf8 | Export-Csv $($file+"_0.csv") -NoHeader -UseQuotes Never -Encoding utf8BOM

 ※ -NoHeader で最初の一行を取っているのがポイントです。

(3) 10行ずつのファイルに分割します。
 > $i=1; Get-Content $($file+"0.csv") -ReadCount 10 -Encoding utf8 | ForEach-Object {$header | Out-File $($file+""+$i+".csv") -Encoding utf8BOM; $_ | Out-File $($file+"_"+$i+".csv") -Append -Encoding utf8BOM; $i++}

 ※ 分割して考えるとわかりやすいです。
 ① ヘッダーなしのファイルから10行ずつ読み込みます。
  $i=1; Get-Content $($file+"0.csv") -ReadCount 10 -Encoding utf8
 ② ①の結果(3ファイル分)を繰り返し処理します。
  ForEach-Object {実行する処理; $i++}
 ③ 分割したファイルにヘッダー行($header)を書き込みます。
  $header | Out-File $($file+""+$i+".csv") -Encoding utf8BOM;
 ④ 分割したファイルに読み込んだデータ($_)を追加書き(Appned)します。
  $_ | Out-File $($file+"_"+$i+".csv") -Append -Encoding utf8BOM;

結果確認

10行ずつ3ファイル(MORTOR_CYCLE_1~3.csv)に分割されました。各ファイルにはヘッダー行が付いています。

CSV
CSV