PowerShellでCSVファイルを一定の行数で分割します。分割した各ファイルにはヘッダー行を付加します。
実行環境:Windows 11 Home, Powershell 7.4.1
データの準備
以下のようなCSVファイル(C:\CSV\MORTOR_CYCLE.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)に分割されました。各ファイルにはヘッダー行が付いています。