안녕하세요 단일 "jq"명령 내에서 계산을 수행하려고하지만 새 값을 참조하는 방법을 연습 할 수 없습니다.JSON 및 여러 값을 업데이트하는 jq
원래 JSON 내 목표는 초 시대와 운동에 시간을 시작 시간과 종료 시간을 변환하는 것입니다
{
"Status": "Down",
"StatusID": "75328241",
"Start": "2017-03-17 15:06:40",
"End": "2017-03-17 15:08:37",
"Period": "1 Minutes "
}
. 그런 다음 새 값으로 동일한 객체를 출력하십시오. 내가 할 때
이
echo $J_SON | jq '.Start |= (strptime("%Y-%m-%d %H:%M:%S") | mktime),.End |= (strptime("%Y-%m-%d %H:%M:%S") | mktime)'
출력은 다음과 같습니다
의미가{
"Status": "Down",
"StatusID": "75328241",
"Start": 1489763200,
"End": "2017-03-17 15:08:37",
"Period": "1 Minutes "
}
{
"Status": "Down",
"StatusID": "75328241",
"Start": "2017-03-17 15:06:40",
"End": 1489763317,
"Period": "1 Minutes "
}
는 수동이 기본 동작입니다 있다고 말한다.
할당은 대부분의 프로그래밍보다 jq에서 조금 다르게 작동합니다. 언어. jq는 에 대한 참조와 사본을 구별하지 않습니다. 두 객체 나 배열은 같거나 같지 않습니다. "동일한 객체"또는 "같지 않음 객체"라는 추가 개념이 없습니다.
객체가 배열, .foo 및 .bar 인 두 개의 필드를 가지고 있으며, 당신이 .foo 뭔가를 추가 경우 이전에 설정 한 경우에도 경우, 다음 .bar 인은 더 큰받지 않습니다 .bar 인 = .foo . Python, Java, Ruby, Javascript 등의 언어로 으로 프로그래밍하는 데 익숙하다면 을 생각하면됩니다.이전에 jq가 모든 객체의 전체 복사본을 처리하는 것처럼 (성능면에서는 그렇지 않습니다. 실제로 그렇게하지는 않지만, 일반적인 아이디어 인 ).
그러나 그 다음에 초 단위로 값을 출력하고 싶습니다.
나는 성공적으로 같은 기간 얻을 수 있었다 :echo $J_SON | jq '.Period = ((.End | strptime("%Y-%m-%d %H:%M:%S") | mktime)-(.Start | strptime("%Y-%m-%d %H:%M:%S") | mktime))'
출력을
{
"Status": "Down",
"StatusID": "75328241",
"Start": "2017-03-17 15:06:40",
"End": "2017-03-17 15:08:37",
"Period": 117
}
문제 :
나는 각 변수의 개별 값을 얻을 수는 없지만 단일 출력 객체에서 이들을 모두 연결하는 방법을 알아 두십시오.
덕분에, 완벽하게 일했다. 내가 이해하지 못하는 것은 ","필터 구분 기호입니다. 특정 값의 하위 객체에서만 작동하는 경우 왜 파이프를 통해 사용할 수 있습니까? 값을 읽고 변경을 할 때 그것을 사용하는 것이 의미가 있다고 생각합니다.이 경우 배관을 필요로하지 않을 것입니다. – Arturski