長いログファイルを指定行数で分割するPowerShellのサンプルコードを紹介します。
分割したらファイル名の後ろに連番を振ります。
仕様
今回作成するスクリプトの仕様を説明します。
動作仕様
下記のようなフォルダで考えてみます。
ログファイルがいくつか存在していて、中にはファイルサイズが大きすぎて開けないことがよくあります。
こんな時、とりあえず巨大ファイルを指定行数で分割しようというスクリプトを作成します。
ソースコード
ソースコードは下記のとおりです。
作業フォルダ、作成先フォルダ、分割行数はお好みに応じて調整してください。
#作業フォルダ
$workPath = "C:\temp\powershell\file\"
#作成先フォルダ
$generatedPath = "C:\temp\powershell\file\gen\"
#取得対象ファイルの拡張子指定
$extension = ".log"
#分割行数
$splitSize = 1000000
#生成フォルダ作成
New-Item $generatedPath -ItemType Directory
#作業フォルダへ移動
Set-Location -Path $workPath
#フォルダのファイル一覧取得
$items = Get-ChildItem * -File -include ("*" + $extension)
#ファイルごとにループ
foreach ($item in $items) {
#ファイル名取得
$fileName = $item.Name
#ファイル名(拡張子なし)
$fileNameWithOutExtension = $fileName.Substring(0, $fileName.LastIndexOf('.'))
#ファイル分割
$i=0; cat $fileName -ReadCount $splitSize | ForEach-Object { $_ | Out-File ($generatedPath + $fileNameWithOutExtension + "_" + $i + $extension) -Encoding default ; $i++ }
}
Read-Host
実行手順
では実行してみましょう。
先ほどのスクリプトPowerShellのスクリプトファイルを、拡張子*.ps1として保存し実行します。
実行は右クリックメニュー「PowerShellで実行」で実行します。
すると、下記のような画面が出てきて、ファイルの分割が始まります。
ファイルの数によっては多少時間がかかりますので、しばらく待ちます。
実行前
実行前はサイズが大小存在する4ファイルでした。
実行後
実行後、各ファイルが1,000,000行ごとに分割されて、連番が振られた状態で、genフォルダに格納されています。
※なお、実行前のファイルは、通常消えると困るはずなのでそのまま残しています。
また、各ファイルの中身は1,000,000行で区切られています。
参考情報
環境
下記の環境で作成・実行しております。
No. | 環境 | バージョン |
---|---|---|
1 | OS | Windows10 |
2 | PowerShell | 5.1 |
以上です。