Windows

Windows標準でテキストファイルを行数指定分割

テキストファイルを行数指定分割

今回はWindows標準で、テキストファイルなどを分割する方法を紹介します。
私自身も仕事のときによく使うコマンドで、以下のような時に便利です。

  • 大容量のため、テキストファイルが開けない(時間がかかる)
  • 大容量のままだと扱いづらいので、分割して処理しやすくしたい
  • そのままExcelに貼り付けたいが行数オーバーで1シートに収まりきらない

私も仕事で数百万行のテキストファイルを渡されて、
Excelへ貼り付け・処理を命ぜられたことがあったのですが、
そもそもファイルを開けない、ということで困った時がありました。

そんなときにこのコマンドでファイルを分割することで、
ファイルが扱いやすくなり、Excelでの処理も無事完遂することができました。

この記事ではコマンドコマンドの解説コマンドの実例について見ていきます。
というわけで、早速コマンドについて見ていきましょう。

この記事では以下のことが分かります!

  • Powershellを使用して、テキストファイルを分割する方法

 

ファイル分割コマンド

ファイルを分割する時は、Powershellを開いて下記のコマンドを実行します。

$split=0; cat ./[分割対象ファイル名] -ReadCount [分割したい行数] | % { $_ > [分割後ファイル名]_$split.txt;$split++}

[分割対象ファイル名]、[分割したい行数]、[分割後ファイル名]はご自身の環境に合わせて入力してください。

コマンドの解説

簡単な流れを説明すると、ファイルをReadCountで指定した行数ずつ読み込み、テキストに出力するというものです。
詳しく順番に見ていきましょう。

$split=0で変数を初期化

この変数「split」は、分割後のファイル名に連番を付与するために利用します。

cat ./split.txt -ReadCount 1000

パイプライン前の処理を見ていきましょう。
catで分割対象ファイルを-ReadCountずつコンソール出力します。(catはGet-Contentコマンドレットのエイリアスです。)
たとえば100行ずつ分割したい場合は、-ReadCount 100とします。

| % { $_ > split_$split.txt;$split++}

次はパイプライン後の処理について解説します。
まず、%ForEach-Objectコマンドレットのエイリアスです。

次に、$_ > split_$split.txtですが、$_には現在のオブジェクトが格納されています。今回のコマンドだと、パイプラインより前にcatで処理(出力)したものが格納されています
そしてそのオブジェクトをsplit_$split.txtに出力します。
split_0.txt 、split_1.txt…というように、連番でテキストファイルが出力されます。
 

ForEach-Objectとは
パイプラインを介して渡されたオブジェクト(配列等)を繰り返し処理するためのコマンドレット

コマンド実例

これまで、コマンドと、コマンドの解説をしてきましたが、
実際に使用しているところを見た方が早いと思いますので、実例をご紹介します。

今回は下記画像のような、5000行のテキストを用意しました。

5000行のテキストファイル

数字が1~5000まで各行に連番で入力されています。
名前を5000.txtとしてC:\test内に保存しました。

    ディレクトリ: C:\test
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        20xx/xx/xx     xx:xx          28891 5000.txt

 

このファイルを、1000行ずつ分割していきます。
Powershellを開いて、C:¥testに移動し、分割コマンドを実行します。

PS C:\> cd C:\test
PS C:\test> $split=0; cat ./5000.txt -ReadCount 1000 | % { $_ > SPLIT_$split.txt;$split++}

 

[分割対象ファイル名]には「5000.txt」を、
[分割したい行数]には「1000」を、
[分割後ファイル名]には「SPLIT_」を入力しました。

こうすることで、5000.txtを1000行ずつ分割して、SPLIT_0.txt、SPLIT_1.txt…という名前で保存してくれるはずです。

実行後は下記画像のように想定通りに分割されています。
実行後のフォルダの中身

ちゃんと分割されているか確認します。
以下の画像のように、SPLIT_0.txtには1〜1000、
また、SPLIT_1.txtは1001〜2000…といったように、
想定通りに分割されています。

実行後の分割ファイル1 実行後の分割ファイル2

今回は5000行と比較的大きくないテキストファイルでしたが、
これが数十万行、数百万行…、と増えていくと、威力を発揮してくれます。

注意点としては分割処理にも多少の時間はかかることです。
それ際終わってしまえば後は楽になります。

まとめ

今回は、「Windows標準でテキストファイルを行数指定分割」という内容でコマンドをご紹介しました。
今回ご紹介したコマンドは、以下の通りです。

$split=0; cat ./[分割対象ファイル名] -ReadCount [分割したい行数] | % { $_ > [分割後ファイル名]_$split.txt;$split++}

みなさまもテキストファイルを分割したくなった際は、是非ご活用ください。

それでは!

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です