構造化テキストデータを操作するためのコマンドラインツールリスト

テキストベースのファイル形式と、それぞれを(主にLinux上で)操作するためのコマンドラインツールのリストを掲載しています。

目次

DSV

CSVTSVなどを含むDSV(Delimiter-separated values、区切り文字で区切られた値)です。

Awk

AwkはPOSIXで標準化されているコマンドラインツールで、DSVデータ処理用プログラミング言語です。Awkに関するリンクは以下のとおりです。

  • Awk.info — Awkに関する情報が豊富です。

  • AWK Vs NAWK Vs GAWK—プラットフォーム別実装の比較です。

  • すでにプログラミング言語を使用してプログラミングをしている場合は、nawkのmanページを読めばAwkについていち早く学ぶことができます。異なるプラットフォームへの実装にも適用できることを学ぶことができます。GNU Awk マニュアルの膨大さに圧倒された人にはまずnawkのmanページを読むことをお勧めします。

POSIXコマンド

コマンド名 説明
cut 単一もしくは複数のファイルから選択部分を切取るコマンド。区切り文字で区切られたフィールドに使用可能。使用のシステムで、man 1 cutを確認してください。(GNU, FreeBSD).
join 2つのファイルを読み、共通するフィールドの行を結合します。使用のシステムで、man 1 joinを確認してください。(GNU, FreeBSD).
paste 複数のテキストファイルを行単位で連結し、1つにまとめます。使用のシステムで、man 1 pasteを確認してください。(GNU, FreeBSD).
sort キーとなるフィールドで行をソートします。使用のシステムで、man 1 sortを確認してください。(GNU, FreeBSD).
uniq 重複する行の検索または削除をします。使用のシステムで、man 1 uniqを確認してください。(GNU, FreeBSD).

その他のツール

ツール名とリンク 説明
GNU datamash テキスト入力に対して統計的処理を実行します。
Miller CSVやJSONの表データのような、名前でインデックスされたデータ用のsedawkcutjoinsortです。
tab データ処理用のチューリング完全ではないプログラミング言語です。Awkの代わりになります。
xsv CVSファイルのインデックス、スライス、分析、分割、統合をします。

SQLベースのユーティリティ

ユーティリティ名 言語とデータベース 機能 使用方法のリンク ライセンス
csvkit Python、SQLite3 ヘッダ行を列名に使用できる。カスタム入出力エンコーディング、カスタム入力フィールドセパレータ、カスタム出力フィールドセパレータ、カスタム出力フォーマット、CSV結合、Pythonモジュール。ExcelやJSONをCSVに変換。CSVをJSONに変換。SQLクエリをCSV出力。 使用法 MIT
q Python、SQLite3 ヘッダ行を列名に使用できる。カスタム出入力エンコーディング、標準入力を圧縮、カスタム入力フィールドセパレータ(文字列リテラル)、カスタム出力フィールドセパレータ、カスタム出力フォーマット、表の結合、Pythonモジュール。 使用法 GNUGPL3
Sqawk Tcl、SQLite3 ヘッダ行を列名に使用できる、カスタム入力フィールドセパレータ(正規表現、ファイル単位)、カスタム入力レコードデリミタ(正規表現、ファイル単位)、カスタムで表に名前を付けられる、カスタム出力フィールドセパレータ、カスタム出力レコードセパレータ、列の結合、ASCII/Unicode変換表が出力、CSV入出力、JSON出力、Tcl出力、表の結合。 使用法 MIT
sqawk C、SQLite3 ヘッダ行を列名に使用できる、列名に別名を付けることができる、正規表現の一致を見つけるまで行を飛せる、カスタム入力フィールドセパレータ(文字列リテラル、ファイル単位)、SQLiteファイルを保持、生成したSQLを表示、表の結合。 使用法 ?
Squawk Python、カスタムSQLインタープリタ ログにアクセス、CSV入力、JSON出力とCSV出力、Pythonコード生成。 Three-clauseBSD
termsql Python、SQLite3 ヘッダ行を列名に使用できる、カスタムフィールドセパレータ(正規表現)、カスタムレコードセパレータ(文字列リテラル)、行を列として使用できる、最初と最後の複数の行を飛ばすよう設定できる、選択した列を結合、HTML出力、CSV出力、SQL出力、Tcl出力。 マニュアル MIT
textql Go、SQLite3 ヘッダ行を列名に使用できる、SQLiteを保持、カスタム入力フィールドセパレータ(文字列リテラル)。 使用法 MIT

XMLやHTML

ツール名とリンク 説明
pup CSSセレクタを使用してHTMLページをフィルタリングします。jqにインスパイアされています。
Saxon XPath表現構文を使用してXMLとHTMLのデータを取得します。ドキュメント
tq CSSセレクタを使用してHTMLからコンテンツを取り出します。
xml2 XMLとHTMLからgrepできる”path=value”命令文リストに変換、グレップできる”path=value”命令文リストからXMLとHTMLに変換します。
XMLStarlet XML文書の変換、クエリ、バリデーション、編集をします。

StackOverflowで掲載されているXMLコマンドライン処理用のgrepとsedライクな機能も参照してください。

JSON

ツール名とリンク 説明
jo シェルからJSONオブジェクトを作成します。
jq 関数型DSLでJSONの作成と操作をします。JSONを他のフォーマットに変換可能。
jshon getoptスタイルのコマンドラインオプションを使用してJSONの作成と操作をします。
json2 JSONからgrepできる”path=value”命令文リストに変換、グレップできる”path=value”命令文リストからJSONに変換します。xml2をモデルとしています。
jsonaxe PythonベースDSLを持つJQに似たJSONプロセッサです。
json JQに似ていますがJavaScriptで書かれています。JSON入力上で任意のJavaScriptを実行することができます。
json-table シェルでの処理のために表にJSONデータ構造を変換します。
json.tool(Python3ドキュメント) JSONデータを検証し、整形します。このモジュールは、Pythonの2/3の標準ライブラリの一部なので、Pythonがインストールされていれば、このモジュールもインストールされています。
jsonwatch コマンドラインで、JSONデータの変更をリアルタイムにトラッキングします。watch-dのように機能します。
lobar lodash.chain()用ラッパーを使用して、バッチでJSONをインタラクティブに探索・処理をします。JavaScriptシンタックスでのjqの代替ともいえます。
validjson JSONデータを検証・整形します。

YAMLやTOML

下のRemarshalのようなフォーマット変換ツールを使用すれば、JSONツールでYAMLとTOMLを処理できますが、変換の際にデータを失わないように気を付けてください()。

ツール名とリンク 説明
Remarshal YAML、TOML、JSONの間でフォーマット変換します。それぞれのフォーマットを検証し、整形します。
shyaml YAMLのデータを読み取ります。シェルスクリプトで使用するためにNULL終端文字列を出力できます。
validyaml YAMLデータを検証し、整形します。

INI

ツール名とリンク プラットフォーム ライセンス 説明
crudini Python2.xのいずれでも GNUGPLv2 INIファイルのプロパティの設定と削除をします。シェルスクリプトコマンドとしてプロパティを取り出し、対応する変数を設定します。その場で更新されたINIデータを出力またはファイルの変更をします。
IniFile(DOS版) Windows(x86、x86-64)、MS-DOS Closed-sourcefreeware INIファイルのプロパティの設定と削除をします。’set’コマンドのバッチファイルのリストととしてプロパティを取得し、対応する変数をセットします。その場でファイルの変更をします。
initool Windows、Linux、FreeBSD MIT INIファイルのプロパティの設定と削除をし、存在を確認します。更新されたINIデータを出力します。

設定ファイル

  • Augeas-データを複数のファイル形式から抽出し、形式の変更をします。Augeasが全てのファイル形式を同じようにサポートしていないこと、場合によってはパースに有効なファイルの一部しかサポートしていないことに注意してください。

  • Elektra設定ファイルを操作します。アプリケーションに特化した設定ファイル(同じレンズを使用)に関しては、Augeasと同じ制約があります。JSONやINIなどの一般的な形式の方がよくサポートされています。

おまけ:単一ファイルデータベース用コマンドラインインタフェース(CLI)

名称 説明 ファイル形式
GNU Recutils “recfileと呼ばれる、人による編集が可能な、プレーンテキストデータベースにアクセスするためのツールやライブラリです。” “key:value”に似たテキスト形式
SDB “djbのcdbディスクストレージをベースにした単純な文字列のキーと値のデータベースで、JSONと配列イントロスペクションをサポートしています。” バイナリ形式
sqlite3(1) “SQLiteデータベースに対してSQLステートメントの手動で入力と実行を可能にする単純なコマンドラインユーティリティです。” バイナリ形式

ライセンス

ここで記載した内容は、Creative Commons Attribution 4.0 International Licenseに帰属します。貢献される場合は、著作権がこのライセンスに属することに同意していただくことになります。

情報開示

本稿を書いた著者によって、SqawkjsonwatchRemarshalinitoolは書かれています。