同じようなことを何度も繰り返しては、手に馴染まず気まぐれに作り直す、ということをしている。なんだかんだいって Perl のワンライナーでやっつけるのが一番手軽。
標準入力とファイル入力の両方に対応してみた。
logfmt 発祥の地っぽいブログ記事は例が簡素すぎてイマイチ参考にならないが、logfmt フォーマットのパーサー実装はいくつかの言語で存在し、BNF 風の定義もソースコードに書いてあったりする。
- logfmt — brandur.org
- GitHub - kr/logfmt: Parse logfmt messages
- logfmt/decode.go at main · kr/logfmt · GitHub
- GitHub - cyberdelia/logfmt-ruby: Parse log lines in the logfmt style.
しかし、外部パッケージをインストールしづらい環境で使いたい理由があるので、どうしてもシェル(と大抵の環境にインストール済みのツール)のみで再実装したい。そしてそれはなるべく手軽にコピペして使いまわしたい。仕様に準拠したパーサー実装はそれなりにボリュームがあるのでコピペには不向き。なので適当にまあだいたい動けばいいんじゃない?という感じのものを書いた。