2016年6月2日
構造化テキストデータを操作するためのコマンドラインツールリスト
本記事は、原著者の許諾のもとに翻訳・掲載しております。
テキストベースのファイル形式と、それぞれを(主にLinux上で)操作するためのコマンドラインツールのリストを掲載しています。
目次
DSV
CSV や TSV などを含む 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の表データのような、名前でインデックスされたデータ用の sed 、 awk 、 cut 、 join 、 sort です。 |
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 に帰属します。貢献される場合は、著作権がこのライセンスに属することに同意していただくことになります。
情報開示
本稿を書いた著者によって、 Sqawk 、 jsonwatch 、 Remarshal 、 initool は書かれています。
株式会社リクルート プロダクト統括本部 プロダクト開発統括室 グループマネジャー 株式会社ニジボックス デベロップメント室 室長 Node.js 日本ユーザーグループ代表
- Twitter: @yosuke_furukawa
- Github: yosuke-furukawa