[Mac] テキストファイルを行数で分割する

以前 csv ファイルを行数で分割するには split コマンドを使えばいいと書いた。例えば何百行にも及ぶテキストを 50 行ごとに分割するような場合だ。

YOURLS に URL を一括登録する – with a Christian Wife
https://wacw.cf/2019/04/08/bulk-import-urls-to-yourls/

あらためて split コマンドを使い、分割しようとしたら d オプション(出力されるファイル名に連番を付けるオプション)が使えず、illegal option などと表示される。

1$ split -l 50 -d input.csv output
2split: illegal option -- d
3usage: split [-a sufflen] [-b byte_count] [-l line_count] [-p pattern] [file [prefix]]

以下のサイトによると、Mac においては GNU の split コマンドと macOS の split コマンドが別物だからだそうだ。

macos – -d option for split is illegal on OS X 10.9 – Ask Different
https://apple.stackexchange.com/questions/138785/d-option-for-split-is-illegal-on-os-x-10-9

そこで Homebrew で coreutils というツールをインストールして解決することにした。

環境:macOS Catalina Version 10.15.6(英語環境)

(1)Homebrew で coreutils をインストールする。

$ brew install coreutils

(2)gsplit コマンドで連番オプションが使えるようになる。

$ gsplit -l 50 -d input.csv output

なお拡張子も一緒に付けて出力したい場合は –additional-suffix オプションを使う。

$ gsplit -l 50 -d input.csv output --additional-suffix=.csv

なお、分割前のファイルの改行コードは CR ではなく、LF にしておく必要がある。でないと分割できない。

参考:
Linux – ファイル分割時に拡張子を揃えたい|teratail
https://teratail.com/questions/64314

【split】Linuxでファイルの分割と結合方法 | server-memo.net
https://www.server-memo.net/tips/split.html