ささやかな日々記

日々過ごす中で感じたことや培ったことが誰かの役に立てられたらと思うSEの雑記

PowerShell 大容量ファイルの分割方法

まずは以下のようにある程度の容量があるファイルがあるとします。

PS C:\work> dir


ディレクトリ: C:\work


Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2019/05/18 9:26 10200000 a.txt

 

 

本来これくらいではエディタで読み込みないなんてことはないと思うのですが、
1GBを超えたあたりから、悲鳴を上げるエディタが出てきます。

今回はそんな大きなファイルがあった場合、PowerShellから指定行数で分割するというもの。
あまり装備がそろっていない状況で、大きなログファイルを見なければいけないなんて時には
役立つのではないかと思います。

以下は10000行で区切ったファイルを作成し、ファイル名にそれぞれインクリメントした数字を当てはめたもの

$fileCnt=1; Get-Content a.txt -ReadCount 2 | % {$fileNo=$fileCnt | % { "{0:000}" -f $_}; $_ > a_$fileNo.txt; $fileCnt++}

結果はこうなります。(元のファイルはそのままです。)

 

PS C:\work> dir


ディレクトリ: C:\work


Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2019/05/18 9:26 10200000 a.txt
-a---- 2019/05/18 9:43 2040002 a_001.txt
-a---- 2019/05/18 9:43 2040002 a_002.txt
-a---- 2019/05/18 9:43 2040002 a_003.txt
-a---- 2019/05/18 9:43 2040002 a_004.txt
-a---- 2019/05/18 9:43 2040002 a_005.txt
-a---- 2019/05/18 9:43 2040002 a_006.txt
-a---- 2019/05/18 9:43 2040002 a_007.txt
-a---- 2019/05/18 9:43 2040002 a_008.txt
-a---- 2019/05/18 9:43 2040002 a_009.txt
-a---- 2019/05/18 9:43 2040002 a_010.txt

 

これで分割ができました。

「-ReadCount 10000」で行数を指定していますので、元のファイル容量(行数)に応じて
変更することで任意のファイルに分割することができます。
ただバイト数などではなく、あくまで行数での指定になりますので、注意が必要です。