Использование jq для извлечения определенных значений свойств и вывода в одной строке

У меня есть вывод снимка ElasticSearch, и я хотел бы сократить его для печати в одной строке из каждого snapshot значений свойств end_time_in_millis и snapshot, разделенных пробелом:

1429609790767 snapshot_1
1429681169896 snapshot_2

В основном вывод

  • cat data | jq '.snapshots[].end_time_in_millis' и
  • cat data | jq '.snapshots[].snapshot'

но объединены в одну строчку.

Я смотрел на map, но не мог понять, как его применить; также прочитав этот ответ, я попробовал:

cat data  | jq '.snapshots[] | map(. |= with_entries( select( .key == ( "snapshot") ) ) )'

Но это приводит к множеству ошибок и null вывода.

Данные:

{
  "snapshots": [
    {
      "shards": {
        "successful": 1,
        "failed": 0,
        "total": 1
      },
      "failures": [],
      "snapshot": "snapshot_1",
      "indices": [
        "myindex1"
      ],
      "state": "SUCCESS",
      "start_time": "2015-04-21T09:45:47.041Z",
      "start_time_in_millis": 1429609547041,
      "end_time": "2015-04-21T09:49:50.767Z",
      "end_time_in_millis": 1429609790767,
      "duration_in_millis": 243726
    },
    {
      "shards": {
        "successful": 1,
        "failed": 0,
        "total": 1
      },
      "failures": [],
      "snapshot": "snapshot_2",
      "indices": [
        "myindex1"
      ],
      "state": "SUCCESS",
      "start_time": "2015-04-22T05:36:02.333Z",
      "start_time_in_millis": 1429680962333,
      "end_time": "2015-04-22T05:39:29.896Z",
      "end_time_in_millis": 1429681169896,
      "duration_in_millis": 207563
    }
  ]
}

person mark    schedule 01.05.2015    source источник


Ответы (1)


Используйте этот фильтр:

.snapshots[] | "\(.end_time_in_millis) \(.snapshot)"

При этом для каждого снимка создается строка, состоящая из времени окончания и имени снимка.

Просто убедитесь, что вы используете параметр -r для получения необработанного вывода.

person Jeff Mercado    schedule 01.05.2015
comment
Отлично и спасибо за быстрый ответ. Я не заметил stedolan.github.io/jq/manual/#Stringinterpolationfoo как-то - person mark; 01.05.2015