1. ホーム
  2. powershell

[解決済み] PowerShellでテキストファイルを分割するには?

2023-07-06 11:30:18

質問

大きな (500 MB) テキスト ファイル (log4net の例外ファイル) を、5 MB のファイル 100 個のような管理しやすい塊に分割する必要があります。

私は、これは PowerShell にとって公園を歩くようなものだと思います。どうすればよいのでしょうか?

どのように解決するのですか?

これは PowerShell にとってやや簡単なタスクですが、標準の Get-Content コマンドレットが非常に大きなファイルをあまりうまく扱えないという事実によって、複雑になっています。 私が提案するのは、.NET の StreamReader クラス を使用して、PowerShell スクリプトでファイルを 1 行ずつ読み込んで Add-Content コマンドレットを使用して、各行をファイル名のインデックスを増加させながらファイルに書き込みます。 こんな感じかな。

$upperBound = 50MB # calculated by Powershell
$ext = "log"
$rootName = "log_"

$reader = new-object System.IO.StreamReader("C:\Exceptions.log")
$count = 1
$fileName = "{0}{1}.{2}" -f ($rootName, $count, $ext)
while(($line = $reader.ReadLine()) -ne $null)
{
    Add-Content -path $fileName -value $line
    if((Get-ChildItem -path $fileName).Length -ge $upperBound)
    {
        ++$count
        $fileName = "{0}{1}.{2}" -f ($rootName, $count, $ext)
    }
}

$reader.Close()