GB単位のファイルを分割し後続処理に使用する必要が出てきた際に試行した為、備忘録としてコマンドを紹介いたします
概要
はじめに分割したいファイル名/分割行数を設定し、
コマンドプロンプトからPowerShellを呼び出す事によりファイル分割を行います
容量が大きいファイルでも設定した行数毎に読み込み出力する為、
分割行数の指定によりメモリ不足も環境別に対応が出来るようにしています
コマンドプロンプトからコマンドでファイル分割
分割するファイル名: sample.csv
分割行数: 100
powershell -NoProfile -ExecutionPolicy Unrestricted -Command "$i=0; Get-Content sample.csv -Encoding UTF8 -ReadCount 100 | foreach-object {$_ | Out-File -FilePath sample_Split$i.csv -Encoding UTF8 -Append;$i++ }"

※参考は軽量なファイルですが100GB以上のファイルに対して分割した実績があります
バッチファイル実行
分割コマンドを記入したバッチファイルを作成しダブルクリックからファイル分割を行います
分割するファイル名: batSample.csv
分割行数: 550
@echo off
@chcp 65001>nul
@rem 読み込みファイル名
set filename=batSample.csv
@rem 分割行数
set limit=550
@rem 分割コマンド(ps)
set splitCommand="$i=0; Get-Content %filename% -Encoding UTF8 -ReadCount %limit% | foreach-object {$_ | Out-File -FilePath %filename%_Split$(\""{0:000}\"" -f $i).csv -Encoding UTF8 -Append;$i++ }"
@rem ファイル分割実行
powershell -NoProfile -ExecutionPolicy Unrestricted -Command %splitCommand%
echo ファイル分割が完了しました
pause
exit
おわりに
フリーソフトを導入しても良い環境ならフリーソフトの方が楽かもしれませんが、
Windows標準機能(コマンドプロンプト/PowerShell)の場合は個人で好きなように調整が可能な事が利点だと感じましたね。
実運用ではバッチファイルを拡充し対話形式にて分割ファイル、分割行数、出力先を設定可能としていますので各自で調整し簡易ツールとして持っておくことをお勧めいたします
コメント