Bashを使った業務自動化: CSVとJSONのデータ収集・整形ガイド

業務自動化ハック
スポンサーリンク

日常業務やプロジェクトにおいて、データの収集と整形は避けて通れない作業です。この作業を効率化するためにプログラミングに精通していない方にもおすすめしたいのが「Bash」です。今回は、Bashを駆使してCSVとJSON形式のデータを収集し、整形する方法に焦点を当て、その手順やテクニックを詳しく解説します。

Bashとは

まずBashが何者かを簡単にご説明します。Bashは「Bourne Again SHell」の略であり、UnixやUnix系のオペレーティングシステムで広く利用されているコマンドラインインタプリタです。Bashスクリプトは、複雑な処理を自動化するための強力なツールです。特にテキスト操作に優れており、データファイルの整形作業には理想的です。

CSVファイルの処理

CSVの読み込みと基本操作

CSV(Comma-Separated Values)ファイルは、文字通りカンマで区切られた値を持つファイルです。Bashでは、awkcutコマンドを利用してCSVのデータを扱えます。

#!/bin/bash

# CSVファイルから特定列を抽出する例
awk -F, '{print $1, $3}' data.csv

このスクリプトでは、data.csvの1列目と3列目を抜き出しています。-F,オプションを用いることで、カンマ区切りを指定しています。

CSVの整形

整形にはsedコマンドが役立ちます。不要なカラムを削除したり、データを置換する際に使います。

# 文字列の置換
sed 's/OLD/NEW/g' data.csv > formatted.csv

この例では、OLDという文字列をNEWに置き換え、結果をformatted.csvに出力しています。

JSONファイルの処理

JSON(JavaScript Object Notation)は、構造化データを表すために一般的に使用されるフォーマットです。BashでJSONを扱う際には、jqコマンドが非常に強力です。

jqを使ったJSONの読み込み

jqはJSONを読み込んでパースするためのコマンドラインツールです。JSONの各フィールドに簡単にアクセスできます。

#!/bin/bash

# JSONファイルから特定フィールドを抽出する
jq '.users[] | {name: .name, email: .email}' data.json

このスクリプトでは、data.jsonからusers配列内の各オブジェクトのnameemailフィールドを抽出しています。

JSONデータの整形

jqはデータのフィルタリングや整形も得意です。選択的にデータを取得できるため、必要な情報を簡単に抽出できます。

# 筆者をJohn Doeに置き換える
jq '(.articles[] | select(.author == "Old Author")) |= . + {author: "John Doe"}' articles.json > updated_articles.json

この例では、articles.json内のauthorフィールドが"Old Author"のオブジェクトを"John Doe"に置き換えています。

Bashスクリプトの自動化

一度書き上げたBashスクリプトは、Cronジョブを利用することで定期的な実行が可能です。例えば、夜間の業務時間外にデータ収集と整形を自動化することで、翌朝すぐに結果を利用できるようになります。

Cronジョブの設定

Cronは時間ベースのジョブスケジューラで、簡単にタスクをスケジュールできます。

# 毎日16時にスクリプトを実行する設定
0 16 * * * /path/to/your/script.sh

上記のCron設定は、毎日16時に/path/to/your/script.shを実行するものです。

Bashスクリプトのテストとデバッグ

スクリプトを書く際には、細心の注意を払う必要があります。Bashには、デバッグ用オプション-xがあり、詳細な実行ログを得ることができます。

#!/bin/bash -x

スクリプト冒頭に#!/bin/bash -xと記述すると、実行中のコマンドがすべて表示されるため、エラーの原因を特定しやすくなります。

まとめ

Bashを用いたCSVとJSONのデータ処理は、業務効率を飛躍的に向上させる可能性があります。強力なテキスト操作機能と自動化の組み合わせにより、データの整形・収集プロセスを効果的に実行できます。Bashの基本を押さえることで、毎日のデータ処理が格段に楽になるでしょう。これを機に、ぜひ業務自動化に挑戦してみてください。

コメント