타임스탬프가 포함된 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
이름이 지정된 배열의 값에서 초기 배열을 안전하게 생성하기 위한):vtg
bash
#!/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/