kg-icon
sadservers - "Minneapolis": Break a CSV file
2025-08-10

問題

data.csvファイルをほぼ同じ10個のサイズに分割してください、という内容のものです。

但し各10個のファイルそれぞれにヘッダーは必要で、32KBを超えてはいけないという制約があります。

やったこと

ワンライナーは苦手なのでシェルを書くことにしました。

bash
1$ vim split.sh

をしてシェルファイルを作成し、以下のコードを記述しました。

問題なく完了できたのでよしとします。

bash
1#!/bin/bash
2
3input="/home/admin/data.csv"
4dir="/home/admin"
5
6# ヘッダー取得
7header=$(head -n 1 "$input")
8
9# ヘッダーを除いた10個のファイルに分割するための準備
10tail -n +2 "$input" > "$dir/body.tmp"
11body_size=$(wc -c < "$dir/body.tmp")
12chunk_size=$(( body_size / 10 ))
13
14# ファイル分割
15split -b "$chunk_size" -d -a 2 "$dir/body.tmp" "$dir/data-"
16
17# 分割したファイルにヘッダーをつける
18for f in "$dir"/data-[0-9][0-9]; do
19	new_file_name="${f}.csv"
20	{ echo "$header"; cat "$f"; } > "$new_file_name"
21	rm "$f"
22done
23
24rm "$dir/body.tmp"