2017-01-30 1 views
2

jq/bash/python을 사용하여 파일의 모든 타임 스탬프를 유닉스 시간 포맷으로 변환하려고합니다.JSON 파일의 모든 타임 스탬프를 bash (Ubuntu)의 유닉스 타임 스탬프로 변환

원래의 형식은 좀 이상하다 :

%Y-%m-%dT%H:%M:%S.%z 

GoToMeeting은 API의 샘플 파일 내용 :

[ 
    { 
    "Last Name": "John", 
    "Subject": "Meet Now", 
    "meetingId": "983329197", 
    "meetingType": "immediate", 
    "First Name": "Doe", 
    "Conference Info": "111-222-333", 
    "startdate": "2017-01-25T04:50:25.+0000", 
    "enddate": "2017-01-25T05:50:25.+0000", 
    "status": "INACTIVE" 
    }, 
    { 
    "Last Name": "John", 
    "Subject": "dumb meeting", 
    "meetingId": "569996685", 
    "meetingType": "scheduled", 
    "First Name": "Doe", 
    "Conference Info": "111-222-333", 
    "startdate": "2017-02-15T10:00:00.+0000", 
    "enddate": "2017-02-15T10:30:00.+0000", 
    "status": "INACTIVE" 
    } 
] 

나는 이것을 실행하여 유닉스 단지 하나의 값을 변환 할 수 있었다 :

입력 :

jq 'strptime("%Y-%m-%dT%H:%M:%S.%z") | mktime'; 
"2015-03-05T04:50:25.+0000" 

출력 :

1425531025 

이의 주요 목표는 현재 시간보다 오래된 모든 날짜를 필터링 한 다음 로컬 시간으로 변환하는 것입니다. 첫 번째 대답 필터

def convert: strptime("%Y-%m-%dT%H:%M:%S.%z") | mktime; 

:

+0

원래 형식이 전혀 이상하지 않습니다. 그것은 ISO입니다. –

답변

1

가 첫 번째 질문 및 주요 목표 모두를 해결하기 위해, 당신은 아마 여기 한 줄에 따라 지정되는 편리한 함수를 정의 할 수 있습니다

now as $now 
| map(select((.startdate|convert >= $now) and (.enddate|convert >= $now))) 
:

map((.startdate |= convert) | (.enddate |= convert)) 

, 당신은이 필터와 위 데프을 사용할 수 있습니다 관심있는 개체를 선택하려면 다음과 같이 질문은 다음 작성할 수 있습니다

불행히도 jq는 현재 표준 시간대를 지원하지 않으므로 "로컬 시간"으로 다시 변환 할 방법을 모르겠습니다. 어떤 독창성과 문자열 조작으로, 가장 일반적인 방법은 아닐지라도, 그것은 jq에서 수행 될 수 있습니다.

관련 문제