31歳ほぼ未経験からIT業界へ転職。備忘録と勉強になればと思いサイトを立ち上げました。

IT技術のあれこれ

PowerShell

Powershellで数万行のファイルを分割する方法

投稿日:

ChatGPTは本当に便利なので、仕事でも大活躍していると感じる機会が増えてきました。

数万行のエラーログをChatGPTに渡すだけでログを解析して、原因、対策まで教えてくれるので、便利すぎて恐ろしくなってきます。

エラーログのログが数万行過ぎて、ログが開けなかったり、ChatGPTに渡す時にエラーになった際に、ログを分割するPowerShellを作成しました。

 

 

param(
[Parameter(Mandatory = $true)]
[string]$LogPath # 分割したいログファイルのフルパス
)

# 1. 元ファイルの存在チェック
if (-not (Test-Path -Path $LogPath)) {
Write-Error "指定されたファイルが見つかりません: $LogPath"
exit 1
}

# 2. 出力先ディレクトリをデスクトップ配下に作成
# 例: C:\Users\<User>\Desktop\log_part
$desktopPath = [Environment]::GetFolderPath('Desktop')
$outDir = Join-Path $desktopPath 'log_part'

if (-not (Test-Path -Path $outDir)) {
New-Item -Path $outDir -ItemType Directory | Out-Null
}

# 3. ファイル名・拡張子を分離
$baseName = [System.IO.Path]::GetFileNameWithoutExtension($LogPath)
$ext = [System.IO.Path]::GetExtension($LogPath)

# 4. 5000行ごとに分割して出力
$linesPerFile = 5000
$index = 1

Get-Content -Path $LogPath -ReadCount $linesPerFile | ForEach-Object {
$suffix = '{0:00}' -f $index # 01, 02, 03...
$outName = "{0}_{1}{2}" -f $baseName, $suffix, $ext
$outPath = Join-Path $outDir $outName

$_ | Set-Content -Path $outPath -Encoding UTF8

Write-Host "出力: $outPath"
$index++
}

 

こちらを「.ps1」ファイルとして保存して下さい。ここでは「Split-Log.ps1」としています。

分割したファイルを出力する場所のフォルダを任意の場所に、任意のフォルダ名で作成して下さい。こちらのPowerShellでは、「Cドライブのデスクトップ配下」に「log_part」フォルダで作成しています。

出力先を変更したい場合は、「# 2. 出力先ディレクトリをデスクトップ配下に作成」を修正して下さい。

分割したい行数は、「# 4. 5000行ごとに分割して出力」で分割する行数を入力して下さい。

作成したPowerShellのファイルを適宜、任意の場所に保存して下さい。

PowerShellでのコマンド実行は以下となります。

・PowerShellの保存先へ移動
cd C:\Users\<ユーザー名>\Desktop\log_part

・分割したいファイルを指定
.\Split-Log.ps1 -LogPath "ログファイルのパスをフルパスで指定"

参考例)
.\Split-Log.ps1 -LogPath "C:\Users\<ユーザー名>\Desktop\log_part\<分割したいファイル名を指定>"

 

-PowerShell

Copyright© IT技術のあれこれ , 2025 AllRights Reserved Powered by AFFINGER4.