CSVの編集にはOfficeのAccessが便利だけど、MacにはAccessがない。
そこで、ターミナルからサクッとCSV編集する方法を2通り考えた。

qコマンド

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

インストール

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

$ 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編集ツールではなくデータベースだが、CSV編集などの用途でも便利。
インポートしても .exit したらテーブルが消えるので、こういう用途にはちょうどいい。
SELECT文だけでなく、UPDATE文も対応している。

インストール

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

$ brew install sqlite3 

よく使うコマンド

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

事前に文字コードをUTF-8に変換しないと、カラム名を指定しても「no such column」となる。
ワイルドカード(曖昧検索)は % を使って表現する。
各コマンドの先頭には「.」を付けるが、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