jq
Linuxコマンド

jq でsubstrみたいに文字列を取得する

More than 1 year has passed since last update.

jq

jq 便利ですね。ってもう枯れた話題ですが、いまさらです。
でもちょっとやりたかったことでハマったのでそのメモ。

substrみたいに文字列を取得したかった

マニュアル嫁ってことで、30分位格闘しましたw。そしてやりたいことが簡単にできることを再確認しました。

こんなこと

具体的には、下記のjsonの日付(dateTime)文字列を分解して日付書式にしたかっただけ。まあやり方は、色々あるんですがシンプルにしたかったなということで格闘してました。

test.json
{
  "dateTime": "20170904152510701",
  "tempoCode": "Y123456"
}

を、下記のように。

2017/09/04      Y123456

sed使ったちょっとえぐい感じw

cmd
jq -r '[.dateTime, .tempoCode] | @tsv' | sed 's/^\(.\{4\}\)\(.\{2\}\)\(.\{2\}\)\(.\{2\}\)\(.\{2\}\)\(.\{2\}\)\(.\{3\}\)/\1\/\2\/\3/g'

かっこ悪いw。なので

cmd
jq -r '[ .dateTime[:4] + "/" + .dateTime[4:6] + "/" + .dateTime[6:8], .tempoCode ] | @tsv '

できたーw

便利やわ

json データを加工するために php やら perl で書いていたことを思うとコマンドでできて非常に便利、しかももっと高度なこともできる。

参考にさせて頂いたサイト