🤖

splitとsedを駆使して、ヘッダー行を維持しつつCSVファイルを分割する

2023/03/11に公開

書くこと

  • 数百万行のCSVファイル等をヘッダー行を維持して分割する方法

利用する技術

  • split
  • sed

環境

  • macOS

想定シチュエーション

以下のようなCSVファイルを、

sample.csv

header_1 header_2
row_1_1 row_1_2
row_2_1 row_2_2
... ...
row_N_1 row_N_2
row_N+1_1 row_N+1_2
... ...

ヘッダーを維持した2ファイルに分割したい。

split_1.csv

header_1 header_2
row_1_1 row_1_2
row_2_2 row_2_2
... ...

split_2.csv

header_1 header_2
row_N_1 row_N_1
row_N+1_1 row_N+1_2
... ...

方法論

  1. splitコマンドを使って、任意の行数で分割
  2. sedコマンドを使って、分割後のファイルにヘッダーを付与

splitコマンドを使って、任意の行数で分割

例では、分割単位を3,000,000行単位とする。

split -l 3000000 sample.csv

=> 3,000,000行区切りのファイルを取得できる

sedコマンドを使って、分割後のファイルにヘッダーを付与

分割された2ファイル目にはヘッダー行がないため、追加

sed -i '' '1s/^/"header1","header2"\n/' split_2.csv

参考文献

Discussion