jq 도구를 사용하여 JSON 파일의 쉘 스크립트에서 태그를 얻는 방법은 무엇입니까?

jq 도구를 사용하여 JSON 파일의 쉘 스크립트에서 태그를 얻는 방법은 무엇입니까?

타임스탬프가 포함된 json 파일을 생성하는 쉘 스크립트 및 jq 도구에 대한 질문이 있습니다.

echo "{\"vtg\":[$value]}" | jq -a '. + {date: now|strflocaltime("%r")}' > sample.json 

이 명령을 사용하여 아래 json 파일을 얻었습니다.

{
 "vtg": [
 11.769,
 11.769,
 11.339,
 11.788,
 11.867,
 11.886,
 11.808,
 11.339,
 11.554,
 11.182
 ],
 "date": "03:31:52 PM"
}

하지만 저는 타임스탬프를 원합니다.

"date": [
  15,
  31,
  52
]

언제

 strptime("%H:%M:%SZ")

내가 원하는 형식으로 타임스탬프를 얻어야 합니다. 하지만 오류가 발생합니다.

jq: error (at <stdin>:10): strptime/1 requires string inputs and arguments

누군가 JSON 파일에서 타임스탬프를 얻는 방법을 도와줄 수 있나요?

답변1

strptime()기능은 다음 용도로 사용됩니다.분석하다형식화된 시간(반대 strftime())입니다. 당신이 원하는 strftime().

사용 jq:

jq -n 'now as $t | { date: [ ($t|strftime("%H")), ($t|strftime("%M")), ($t|strftime("%S")) ] }'

strftime()이는 함수에서 제공하는 시간 형식을 지정 하는 데 사용됩니다 now. strflocaltime()시간을 현지 시간으로 변환하는 데 사용됩니다 .

이것이 너무 장황하거나 비효율적이라면(실제로 strftime()배열의 각 요소에 대해 한 번 호출합니다 date!) HH:MM:SS타임스탬프 생성을 고려하십시오.를 입력한 다음 콜론으로 나눕니다.

jq -n '{ date: (now | strftime("%H:%M:%S") | split(":")) }'

위의 명령 중 하나는 다음을 생성할 수 있습니다.

{
  "date": [
    "07",
    "01",
    "23"
  ]
}

전체 스크립트( jo이름이 지정된 배열의 값에서 초기 배열을 안전하게 생성하기 위한):vtgbash

#!/bin/bash

value=(11.769 11.769 11.339 11.788 11.867 11.886 11.808 11.339 11.554 11.182)

jo vtg="$( jo -a "${value[@]}" )" |
jq '. += now as $t | { date: [ ($t|strftime("%H")), ($t|strftime("%M")), ($t|strftime("%S")) ] }'

# or...

jo vtg="$( jo -a "${value[@]}" )" |
jq '. += { date: (now | strftime("%H:%M:%S") | split(":")) }'

jo분명히 다음 명령을 읽어 데이터의 날짜 부분을 동적으로 생성할 수도 있습니다 date.

jo vtg="$(  jo -a "${value[@]}" )" \
   date="$( jo -a $( date +'%H %M %S' ) )"

date이는 형식 문자열의 공백에서 출력을 분리하기 위해 셸을 사용합니다 . 위에서 현지 시간을 알 수 있습니다.

jo도구는 다음에서 사용할 수 있습니다.https://jpmens.net/2016/03/05/a-shell-command-to-create-json-jo/

관련 정보