トップページへ

bashスクリプトでCSVファイルを読み込む方法

小粋空間 » Programming Language » bash » bashスクリプトでCSVファイルを読み込む方法

bashスクリプトでCSVファイルを読み込む方法を紹介します。

1.問題点

bashスクリプトで大量CSVのデータを読み込む必要が生じましたが、読み込む方法がわかりません。

ということで、bashスクリプトでCSVファイルを読み込む方法を紹介します。

2.bashスクリプトでCSVファイルを読み込む

ここではCSVファイルに「名前」「ユーザー名」「パスワード」を3件設定したファイル(sample.csv)を読み込むものとします。

山田,yamada,GU2LTgyM
鈴木,suzuki,Njg4ZWYz
佐藤,sato,b291bf53

bashスクリプト(test.sh)でCSVファイルを読み込むには次のようにします。

#!/bin/bash
 
# 引数でCSVファイル名を取得
input_file="$1"
 
# CSVファイルを行ごとに読み込み
while IFS=',' read -r NAME USER PASS; do
 
    echo "名前: $NAME"
    echo "ユーザー名: $USER"
    echo "パスワード: $PASS"
 
    # ここに必要な処理を追加
 
done < "$input_file"

これでCSVファイルの内容が1行ずつ読み込まれ、変数$NAME,$USER,$PASSにそれぞれ格納されます。

あとは、必要な処理をその中に追加すればOKです。

実行結果

$ ./test.sh sample.csv
名前: 山田
ユーザー名: yamada
パスワード: GU2LTgyM
名前: 鈴木
ユーザー名: suzuki
パスワード: Njg4ZWYz
名前: 佐藤
ユーザー名: sato
パスワード: b291bf53

引数が設定されていない場合のチェックを行うには、赤字の処理を追加します。

#!/bin/bash
 
# 引数でCSVファイル名を取得
input_file="$1"
 
# 引数が指定されていない場合のエラーメッセージ
if [[ -z "$input_file" ]]; then
    echo "使用法: $0 <CSVファイル名>"
    exit 1
fi
 
# CSVファイルを行ごとに読み込み
while IFS=',' read -r NAME USER PASS; do
 
    echo "名前: $NAME"
    echo "ユーザー名: $USER"
    echo "パスワード: $PASS"
 
    # ここに必要な処理を追加
 
done < "$input_file"

さらに、CSVファイルにコメント行や空行が含まれる場合は赤字の処理を追加します。

#!/bin/bash
 
# 引数でCSVファイル名を取得
input_file="$1"
 
# 引数が指定されていない場合のエラーメッセージ
if [[ -z "$input_file" ]]; then
    echo "使用法: $0 <CSVファイル名>"
    exit 1
fi
 
# CSVファイルを行ごとに読み込み
while IFS=',' read -r NAME USER PASS; do
 
    # 空行やコメント行はスキップ
    if [[ -z "$NAME" || "$NAME" =~ ^# ]]; then
        continue
    fi
 
    echo "名前: $NAME"
    echo "ユーザー名: $USER"
    echo "パスワード: $PASS"
 
    # ここに必要な処理を追加
 
done < "$input_file"

« 前の記事へ

次の記事へ »

トップページへ