Skip to content

Instantly share code, notes, and snippets.

@tkuchiki
Last active July 14, 2021 08:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tkuchiki/a53446dd5094f0e8bcc51d0f8b78e112 to your computer and use it in GitHub Desktop.
Save tkuchiki/a53446dd5094f0e8bcc51d0f8b78e112 to your computer and use it in GitHub Desktop.
example of jq

JSON to LTSV

jq -r '.[] | to_entries | map("\(.key):\(.value)") | join("\t")'

aws ec2 describe-instances の Tags に特定の文字列が含まれている PrivateIP のみ出力する

Tags がないとき用に .Tags[]? にしておく

aws ec2 describe-instances | jq -r '.Reservations[].Instances[].Tags[]? | select(.Value | test("regexp pattern"; "i")).PrivateIpAddress'

差集合を求める (subtraction)

$ echo "[]" | jq --argjson foo '["a", "b", "c"]' --argjson bar '["c"]' '$foo - $bar'
[
  "a",
  "b"
]

Object を Array で包んで返す

$ (echo '{"foo":"bar"}'; echo '{"bar":"foo"}';) | jq . -c
{"foo":"bar"}
{"bar":"foo"}

$ (echo '{"foo":"bar"}'; echo '{"bar":"foo"}';) | jq -s .
[
  {
    "foo": "bar"
  },
  {
    "bar": "foo"
  }
]

キーに任意の文字列を含むもののみ出力

$ echo -e '{"foo":"foobar"}\n{"foo":"foobaz"}' | jq '. | select(.foo | contains("baz"))'
{
  "foo": "foobaz"
}

-(ハイフン) を含むキーを扱う

$ echo '{ "foo": { "foo-bar":"baz" } }' | jq -r '.foo["foo-bar"]'
baz

キーの値を書き換える(代入)

|= を使う

$ echo '{"foo": "bar"}' | jq '.foo |= "baz"'
{
  "foo": "baz"
}

置換

jq 1.5 以上?

$ echo '{"foo": "foobar"}' | jq '.foo |= gsub("bar";"baz")'
{
  "foo": "foobaz"
}

キーが無かったら何もしない

# キーあり (キーがあったら .foo の値を書き換える)
$ echo '{"foo":"bar"}' | jq '. | select(.foo != null) | .foo |= "baz"'
{
  "foo": "baz"
}

# キーなし
$ echo '{"foo":"bar"}' | jq '. | select(.foobar != null) | .foo |= "baz"'

キーがないときだけ代入

# キーあり、キーがあるので何もしない
$ echo '{"foo":"bar"}' | jq '.foo //= "hoge"'
{
  "foo": "bar"
}

# キーなし
$ echo '{"foo":"bar"}' | jq '.bar //= "foo"'
{
  "foo": "bar",
  "bar": "foo"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment