bashでCSVを扱う方法まとめ|読み込み・ループ・配列処理の実践例

テキスト処理
スポンサーリンク

シェルスクリプトを使って作業を自動化するとき、CSVファイルを読み込んで処理を繰り返す場面はよくあります。ユーザー一覧やサーバーリスト、設定値をCSVにまとめておけば、bashでループ処理を行うだけで一括処理が可能になります。本記事では、bashでCSVを扱う基本から応用までを、実用的なサンプルとともに解説します。

bashでCSVを読み込む基本

もっともよく使われるのは、while read 構文です。IFS(Internal Field Separator)をカンマに設定することで、CSVを1行ずつ、カンマ区切りで読み込めます。

#!/bin/bash

# users.csv の例
# name,email
# Alice,alice@example.com
# Bob,bob@example.com

while IFS=, read -r name email
do
  echo "名前: $name, メール: $email"
done < users.csv

この方法では、各列をそのまま変数に代入できるので、分かりやすくシンプルです。空白を含むデータでも安全に処理できます。

配列として読み込む方法

CSVの1行を配列として扱いたい場合は、IFSを設定してread -aオプションを使います。これにより、カンマごとに分割された要素が配列に格納されます。

while IFS=, read -r -a fields
do
  echo "1列目: ${fields[0]}"
  echo "2列目: ${fields[1]}"
done < data.csv

この方法は列数が多い場合や、列を動的に参照したいときに便利です。

CSVを分割して扱う方法

「特定の列だけ使いたい」といった場合には、cutawk を利用するのも効果的です。

# 2列目だけを表示
cut -d, -f2 data.csv

# 1列目と3列目を処理
awk -F, '{print "列1="$1, "列3="$3}' data.csv

特にawkは柔軟性が高く、条件分岐や計算を組み合わせた処理が可能です。

CSVをループ処理で回す

CSVを使う大きな利点は「一括処理」です。例えば、URL一覧から順番にcurlでアクセスする場合は以下のように書けます。

while IFS=, read -r id url
do
  echo "ID: $id に対してアクセスします"
  curl -s "$url" -o "result_${id}.html"
done < urls.csv

このようにすることで、CSVにデータを追加するだけで処理対象を増やせるため、メンテナンス性も高まります。

ExcelファイルをCSVに変換して扱う

Excelファイルをそのままbashで扱うことは難しいため、まずはCSVに変換します。Linux環境ではssconvertやLibreOfficeのCLIを使うのが一般的です。

# ExcelをCSVに変換
ssconvert data.xlsx data.csv

# LibreOfficeを利用
libreoffice --headless --convert-to csv data.xlsx

こうしてCSVに変換してしまえば、bashスクリプトで自在に処理できます。

実践ユースケース集

ユーザー登録処理

while IFS=, read -r username email
do
  useradd "$username"
  echo "$username,$email を登録しました"
done < users.csv

サーバーへのSSH処理

while IFS=, read -r host ip
do
  echo "サーバー $host に接続"
  ssh "admin@$ip" "uptime"
done < servers.csv

データの再出力

while IFS=, read -r col1 col2 col3
do
  echo "$col1,$col3" >> newdata.csv
done < olddata.csv

注意点とトラブル解決

CSVを扱う際にはいくつかの注意点があります。

  • ヘッダーをスキップする
    tail -n +2 file.csv を使えば1行目を飛ばせます。 tail -n +2 data.csv | while IFS=, read -r a b do echo "$a $b" done
  • 改行コードの違い
    Windowsで作成したCSVはCRLF改行になるため、dos2unixで変換するのがおすすめです。
  • 空白や日本語を含むデータ
    read -r を使ってバックスラッシュを解釈しないようにすると安全です。

まとめ

bashでCSVを扱う方法は、基本のwhile IFS=, read構文を理解すれば、配列処理やcut/awkを組み合わせて柔軟に拡張できます。ExcelファイルもCSVに変換すれば同じ手法で処理可能です。サーバー運用やログ処理、ユーザー管理など、さまざまな業務効率化に活用できるので、ぜひ実務に取り入れてみてください。

スポンサーリンク
Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント