jqコマンドでjsonlファイルをtsvファイルに変換してみた

2023.01.23

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!DA(データアナリティクス)事業本部 サービスソリューション部の大高です。

軽量なJSON処理コマンドラインツールであるjqは、CLIでJSON処理をするのに便利なコマンドツールです。

今回、このjqを利用してjsonlファイルをtsvファイルに変換してみたので、忘れないうちに残しておこうと思います。

前提

jqコマンドを事前にインストールしています。 各OSでのインストール方法については、下記ページに記載されています。

今回は「Amazon Linux 2」のコンテナイメージ環境にインストールしたので、下記コマンドでインストールしています。

$ sudo yum install jq -y

変換元のjsonlファイル

今回利用するファイルは以下のようなjsonlファイルです。

input.jsonl

{"level":"info","ts":"2023-01-23T10:01:40+09:00","msg":"Start"}
{"level":"info","ts":"2023-01-23T10:01:40+09:00","msg":"Loading"}
{"level":"info","ts":"2023-01-23T10:01:40+09:00","msg":"Done"}

tsvに変換してみる

まずは、CLI上で確認しつつ処理してみます。

シンプルなjsonlファイルなので、そのままフィールドを指定して変換してみます。

$ cat input.jsonl | jq -r '[.level, .ts, .msg]'
[
  "info",
  "2023-01-23T10:01:40+09:00",
  "Start"
]
[
  "info",
  "2023-01-23T10:01:40+09:00",
  "Loading"
]
[
  "info",
  "2023-01-23T10:01:40+09:00",
  "Done"
]

-rオプションは--raw-outputオプションと同義です。

これで、各フィールドをパースした配列に変換することができました。

次に、このデータを@tsvに渡してtsv形式に変換します。

$ cat input.jsonl | jq -r '[.level, .ts, .msg] | @tsv'
info    2023-01-23T10:01:40+09:00       Start
info    2023-01-23T10:01:40+09:00       Loading
info    2023-01-23T10:01:40+09:00       Done

これで想定どおりにtsv形式になりました。

最後に、ファイルに保存します。

$ cat input.jsonl | jq -r '[.level, .ts, .msg] | @tsv' > output.tsv

これでjsonlファイルをtsvファイルに変換することができました。

まとめ

以上、jqコマンドでjsonlファイルをtsvファイルに変換してみました。

jqコマンドはjsonデータを扱うのに便利なので、うまく使いこなせるようになっておきたいです。

どなたかのお役に立てば幸いです。それでは!