大容量のファイルをsplitコマンドで分割する

先日、数GBある大きなログファイルをテストに使う機会があったが、同じ日付のファイルが複数あるときのテストがしたかったのでファイルを適当に分割する必要が生じた。自分でファイルの一部をコピペしてもいいのだが、splitコマンドを使うと手軽に分割できる。

元のファイルは 0014-20190809.json という名前だった。これを分割するには以下のようにする。

split -d -a 3 --additional-suffix=.json 0014-20190809.json 0014-20190809_

-d はsuffixを数字にする。デフォルトではsuffixに付与されるのはアルファベットだが、 -d をつけることで数字にできる。また、 -a はsuffixの文字数を設定する。上の例では3文字なので 000 から始まる。もちろんこの場合、1,000個より多いファイルに分割されるとエラーになる。
--additional-suffix は、suffixの後に共通でつけたい文字列を指定する。今回は分割後もjsonファイルにしたかったので .json をつけた。 また、今回は指定しなかったが、分割後の1ファイルごとの行数を指定して分割したいときは -l オプションを使う。デフォルトでは1,000行ずつに分割される。

最後に分割したいファイルと、分割後のprefixを引数で渡せばよい。 0014-20190809_000.json のようなファイルができあがる。

なおmacの場合、splitコマンドがBSDベースなので、-dオプションなどがない。coreutilsを導入し、GNU版のsplitを使うことをおすすめする。