🤖
splitとsedを駆使して、ヘッダー行を維持しつつCSVファイルを分割する
書くこと
- 数百万行の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 |
... | ... |
方法論
- splitコマンドを使って、任意の行数で分割
- 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