今回はWindows標準で、テキストファイルなどを分割する方法を紹介します。
私自身も仕事のときによく使うコマンドで、以下のような時に便利です。
- 大容量のため、テキストファイルが開けない(時間がかかる)
- 大容量のままだと扱いづらいので、分割して処理しやすくしたい
- そのままExcelに貼り付けたいが行数オーバーで1シートに収まりきらない
私も仕事で数百万行のテキストファイルを渡されて、
Excelへ貼り付け・処理を命ぜられたことがあったのですが、
そもそもファイルを開けない、ということで困った時がありました。
そんなときにこのコマンドでファイルを分割することで、
ファイルが扱いやすくなり、Excelでの処理も無事完遂することができました。
この記事ではコマンド、コマンドの解説、コマンドの実例について見ていきます。
というわけで、早速コマンドについて見ていきましょう。
この記事では以下のことが分かります!
- Powershellを使用して、テキストファイルを分割する方法
ファイル分割コマンド
ファイルを分割する時は、Powershellを開いて下記のコマンドを実行します。
$split=0; cat ./[分割対象ファイル名] -ReadCount [分割したい行数] | % { $_ > [分割後ファイル名]_$split.txt;$split++}
[分割対象ファイル名]、[分割したい行数]、[分割後ファイル名]はご自身の環境に合わせて入力してください。
コマンドの解説
簡単な流れを説明すると、ファイルをReadCountで指定した行数ずつ読み込み、テキストに出力するというものです。
詳しく順番に見ていきましょう。
で変数を初期化
この変数「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行のテキストを用意しました。
数字が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…といったように、
想定通りに分割されています。
今回は5000行と比較的大きくないテキストファイルでしたが、
これが数十万行、数百万行…、と増えていくと、威力を発揮してくれます。
注意点としては分割処理にも多少の時間はかかることです。
それ際終わってしまえば後は楽になります。
まとめ
今回は、「Windows標準でテキストファイルを行数指定分割」という内容でコマンドをご紹介しました。
今回ご紹介したコマンドは、以下の通りです。
$split=0; cat ./[分割対象ファイル名] -ReadCount [分割したい行数] | % { $_ > [分割後ファイル名]_$split.txt;$split++}
みなさまもテキストファイルを分割したくなった際は、是非ご活用ください。
それでは!