当サイトではアフィリエイト広告を利用しています。

【コピペ解決】splitコマンドでヘッダーをつけたままファイル分割するシェルスクリプト!

CSVファイルを分割したい。でも1行目のヘッダーは全部のファイルに残したい。

そんなとき、「split」コマンドだけじゃちょっと足りないんですよね。

というわけで今回は、LinuxやWSL、macOSでそのまま動く「コピペOKなスクリプト」を紹介します!

運用エンジニアの方や、CSVをよくいじる人向けに、実務でそのまま使える形にしてあります。ファイル名と分割数を変えるだけでOKです🙆

📌 この記事でできること

  • CSVファイルを複数に分ける
  • 1行目(ヘッダー)をすべての出力ファイルに付ける
  • Linux/WSL/Macでも動くシェルスクリプトを使う

🔧 使用するコマンド

  • split:ファイルを分割するコマンド
  • head/tail:ヘッダーと本体を切り分け
  • bash:スクリプトで一括処理

📁 入力ファイル例(input.csv)

名前,年齢,性別
田中,30,男
佐藤,25,女
鈴木,28,男
高橋,32,女

📜 コピペOK!ヘッダー付きで分割するシェルスクリプト

以下の内容を split_with_header.sh として保存して、実行権限を付けてください。

#!/bin/bash

input="input.csv"      # 入力ファイル名
prefix="part_"         # 出力ファイルの接頭辞
parts=3                # 分割数(好きに変えてOK)

# ヘッダーを取得
header=$(head -n 1 "$input")

# 本体だけ一時ファイルに保存
tail -n +2 "$input" > tmp_body.txt

# 本体を分割(行数ベースでできるだけ均等に)
split -n l/$parts tmp_body.txt "$prefix"

# 各分割ファイルにヘッダーを先頭に追加
for file in ${prefix}*; do
    tmpfile="${file}.tmp"
    {
        echo "$header"
        cat "$file"
    } > "$tmpfile"
    mv "$tmpfile" "$file"
done

# 一時ファイル削除
rm tmp_body.txt

実行例:

bash split_with_header.sh

🔰 Linuxを試せる環境がない方へ

コマンドなどを実際に試してみたいけれど、Linux環境がない…
そんなときは、「さくらのVPSを使えば簡単に自分専用のLinux環境が手に入ります!

  • ✅ 月額524円(税込)〜手軽に始められる
  • ✅ UbuntuやDebianなど、好みのOSが選べる
  • ✅ SSH接続でターミナル操作もバッチリ
  • ✅ 日本国内の大手サービスで安心・安定

さくらのVPSでLinux学習をはじめる

\ あなただけのLinux環境を5分で構築! /

🧩 スクリプトの1行ずつ解説

#!/bin/bash

→ シェルスクリプトの冒頭お約束。このスクリプトはbashで動かすよ、という宣言。

input="input.csv"

→ 分割対象となるCSVファイルの名前。自分の環境に合わせて変えてOK。

prefix="part_"

→ 分割後のファイル名の接頭語。part_aapart_abのように連番が付く。

parts=3

→ 何個に分けたいか。ここを変更するだけで分割数を調整できる。

header=$(head -n 1 "$input")

→ 入力ファイルの1行目(ヘッダー)を取得して、$headerに代入。
例:「名前,年齢,性別」みたいなやつ。

tail -n +2 "$input" > tmp_body.txt

→ 2行目以降(=データ本体)をtmp_body.txtという一時ファイルに保存。
tail -n +2は「2行目から最後まで」を意味します。

split -n l/$parts tmp_body.txt "$prefix"

→ 本体部分だけを、できるだけ均等な行数で分割します。
-n l/3は「行ベースで3分割」。
出力は part_aapart_ab のように生成されます。

for file in ${prefix}*; do

→ 分割されたファイルすべて(part_aaなど)をループ処理で回す。

    tmpfile="${file}.tmp"

→ ヘッダー付きにするため、一時ファイルを用意。

    {

→ 複数行のコマンドをまとめて処理したいときの書き方(ブレースグループ)

        echo "$header"

→ 先ほど取得したヘッダーを出力(ファイルの先頭に入れる)

        cat "$file"

→ 元の分割ファイルの中身(データ本体)を出力

    } > "$tmpfile"

→ 上記2つの出力(ヘッダー+本体)を.tmpファイルにまとめて書き出し

    mv "$tmpfile" "$file"

→ 一時ファイルを上書きして、元のファイルを更新します(ヘッダー付きに)

done

→ forループの終了。すべてのファイルに対して同じ処理を繰り返します。

rm tmp_body.txt

→ 一時ファイルのtmp_body.txtを削除して後始末。クリーンなスクリプトですね!

📦 出力ファイルの中身(例)

part_aa

名前,年齢,性別
田中,30,男
佐藤,25,女

part_ab

名前,年齢,性別
鈴木,28,男

part_ac

名前,年齢,性別
高橋,32,女

💡 補足・カスタマイズポイント

  • ファイル名を変えたいときは inputprefix を変更すればOK
  • parts を増やせばもっと細かく分けられる
  • split -l 1000 で「○行ごと」に分割もできる

👀 よくある質問

Q. Macでも動きますか?
A. はい。macOS標準のsplitでもOKです(coreutils系)。

Q. WSLやUbuntuでも?
A. もちろん動きます。bash + split があれば問題なし!

Q. 巨大なファイルも大丈夫?
A. ファイルサイズに応じて分割数や方法を調整すればOK。並列処理やgzip連携も可能です。

🧠 まとめ:現場で役立つ“ちょい足しsplit”

Linuxのsplitコマンドは超便利ですが、ヘッダーを維持したまま分割したいときにはちょっと工夫が必要です。

このスクリプトを使えば、毎回同じことを手作業でやらなくてもOK。

分割数とファイル名を変えるだけで再利用できるので、現場の運用やログ処理にぴったり。

「あ、これ欲しかったやつ!」となった方は、ぜひブックマークしておいてください📌

気が向いたらシェアもお願いします👍

🔰 Linuxを試せる環境がない方へ

コマンドなどを実際に試してみたいけれど、Linux環境がない…
そんなときは、「さくらのVPS」を使えば簡単に自分専用のLinux環境が手に入ります!

  • ✅ 月額524円(税込)〜手軽に始められる
  • ✅ UbuntuやDebianなど、好みのOSが選べる
  • ✅ SSH接続でターミナル操作もバッチリ
  • ✅ 日本国内の大手サービスで安心・安定

さくらのVPSでLinux学習をはじめる

\ あなただけのLinux環境を5分で構築! /