先日、1万行あるCSVファイルを1000行ずつに分割する必要があったので、簡単にできる方法を調べました。手作業で分割するとなるととても大変&ミスが起きやすいですが、splitコマンドを使えば、一瞬です!
実行環境:Apple M1 Mac OS Sonoma 14.4.1
splitコマンドとは?
splitコマンドは、ファイルを指定したサイズや個数、行数に分割するコマンドです。ファイルが大きくてアップロードできない時やインポートに失敗してしまう時、ファイルサイズの制限がある時などに便利です。
分割するファイルの種類には特に制限がありません。音楽ファイルやテキストファイルを分割することもできます。今回は、csvファイルを分割してみました。
gsplitのオプションを使う準備
splitコマンド単体でもファイルの分割はできますが、Macの場合、細かいオプション(分割後のファイル名など)がそのままだと使えないので、ターミナルで、Homebrewを使ってcoreutilsをインストールしておきます。coreutilsは他にもいろいろなコマンドが含まれていますが、ここでは説明を省きます。
brew install coreutils
gsplitコマンドの実行
次に、分割したいファイルが置いてあるディレクトリに移動したあと、下記のコマンドを実行します。
gsplit -l 1000 -d -a 3 hogehoge.csv file_hogehoge --additional-suffix=.csv
-l は、行単位で分割するオプションです。-bにすると、バイト単位で分割になります。
-d は、接尾辞を英字ではなく数字にするオプションです。デフォルトだと英語が接尾語になります。
-a 3 は、分割後のファイル名の接尾語の数字の桁数です。
1000 は、分割する行数や、ファイルサイズなどを入れます。
hogehoge.csv は、分割したい元ファイルです。
file_hogehoge は、分割後のファイル名の先頭につける文字列です。
–additional-suffix= は、ファイル名の末尾に文字列を追加するオプションです。
.csv は、分割後のファイルにつける拡張子を入れます。
上記のコマンドを実行すると、1000行ずつに分割されたファイル、file_hogehoge_000.csv,file_hogehoge_001.csv,,file_hogehoge_002.csvといったファイルが生成されます。
なお、分割されたファイルは、ひとつめのファイル以外、ヘッダーがありませんので、手動で追加してあげる必要がありました。そこは少し手間です。
終わりに
今回は、大きなファイルを細かく分割できる、gsplitコマンドを紹介しました。一瞬で分割できるので、大容量のファイルの扱いに困っている方は、ぜひ試してみてください。