Можно ли включить текущую метку времени в команду jq? - PullRequest
1 голос
/ 16 апреля 2020

Я выполняю вызов curl rest-api и пытаюсь добавить несколько пар ключ / значение в UBUNTU. Это моя текущая команда:

curl ..... | jq -c '{"online": .switches.optional.online, "offline": .switches.optional.offline}'

, и вывод, который я получил, выглядит следующим образом:

{ "online": 85, "offline": 196 }

Но что я действительно ищу, так это наличие текущей отметки времени включил тело json, что-то вроде:

   { "current-time": "Wed Apr 15 14:18:42 PDT 2020", "online": 85, "offline": 196 }

В теле ответа API нет текущего сообщения о метке времени, это может быть вызвано самим jq?

Спасибо.

Джек

Ответы [ 3 ]

2 голосов
/ 16 апреля 2020

Должна быть возможность передачи результата другой команды (или переменной et c) в команду jq.

Если в bash, может сработать что-то вроде следующего:

curl ..... | jq -c --arg datum "$(date)" '{"online": .switches.optional.online, "offline": .switches.optional.offline, "current-time": $datum}'

Здесь мы передаем результат команды $(date) в фильтр jq в качестве аргумента $ datum.

Команда date может дать текущее время, отформатированное многими различными способами.

2 голосов
/ 16 апреля 2020

jq имеет встроенную функцию now:

TZ=UTC jq -n 'now | strftime("%a %b %d, %Y %Z %H:%M:%S")'
"Wed Apr 15, 2020 UTC 21:51:07"
TZ=Australia/Sydney jq -n 'now | strftime("%a %b %d, %Y %Z %H:%M:%S")'
"Wed Apr 15, 2020 AEST 21:52:19"

К сожалению, хотя поле% Z зависит от TZ, время, отображаемое параметром strftime, не точно изменяется в зависимости от TZ.

0 голосов
/ 16 апреля 2020

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

$ jq --arg now "$(date)" '{"current-time": $now, "online": .switches.optional.online, "offline": .switches.optional.offline}' <<<'{ "switches": {"optional": {"online": 85, "offline": 196 }}}'

{
  "current-time": "Wed Apr 15 22:03:00 UTC 2020",
  "online": 85,
  "offline": 196
}

Попробуйте онлайн!

Надеюсь, это поможет!

...