MacでECサイト等のCSVファイルをSQL文で編集する方法

Windowsを使っていたときはAccess(Officeのデータベースソフト)でCSVファイルを編集していたが、残念ながらMacにはAccessがない。

僕は一括編集はSQL文を用いて行うのに慣れているのだが、SQL文が使えるアプリはあまり存在しない印象。
Officeの代替としてはLibreOfficeが有名ですが、SQLに関しては使い勝手が悪い。

そこで、「ターミナルで編集できないかなー」と思って、探してみたら二つほど方法を見つけた。

対象読者

Macユーザーでターミナルが使える方。

qコマンド

とてもシンプルなコマンドでSQL文が実行できる。
SELECT文しかないので、複雑な処理には向かない。
また、出力のときにダブルクォーテーションのエスケープができない。
僕の用途には少し合わなかった。

インストール

Macなら以下のコマンドでインストールできる。

$ brew install q 

よく使うオプション

詳しい使い方はこちらで確認できる。

H
ヘッダーを含めてインプット
d
デリミタ指定
O
ヘッダーを含めてアウトプット
W
エスケープ

全ての文字コードをサポートしてると書いてあるが、Shift-JISで読み込んだらうまくいかなかった。
だから、nkfコマンドで予めUTF-8に変換してから実行している。

$ nkf -w --overwrite dl.csv
$ q -H -d , -O -W all "SELECT * FROM './dl.csv'" 

SQLite3

SQLiteは組み込みプログラミングでよく使われるデータベースだが、CSV編集などの用途でも便利に使える。
インポートしても、「.exit」したらテーブルが消えるので、使い切りのCSVの編集にはちょうどいい。
SELECT文だけでなく、UPDATE文も対応しているので、ある程度複雑な処理をするならこちらの方が使いやすい。
また、SQLファイルをインポートすることもできる。

インストール

MacならHomebrewでインストールできる。

$ brew install sqlite3 

よく使うコマンド

基本的なコマンドは「.」を付けて実行する。

テーブル一覧
.tables
デリミタ指定
.separator
インポート
.import
ヘッダーを含めてアウトプット
.headers on
CSV形式でアウトプット
.mode csv
出力ファイル指定
.output
終了
.exit

事前に文字コードをUTF-8に変換しないと、カラム名を指定しても「no such column」となる。
SQLiteではワイルドカード(曖昧検索)が「%」を使って表現できる。
各コマンドの先頭には「.」を付けるが、SQL文の頭には「.」は必要ない。
SQL文の末尾には「;」が必要。

$ nkf -w --overwrite dl.csv
$ sqlite3
sqlite> .separator ,
sqlite> .import dl.csv item
sqlite> SELECT * FROM item;
sqlite> UPDATE item SET カラム名='値';
sqlite> .mode csv
sqlite> .headers on
sqlite> .output item.csv
sqlite> SELECT * FROM item WHERE カラム名 LIKE '%値%';
sqlite> .exit

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です