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/

관련 정보