2017-02-01 9 views
0

У меня есть файл JSON, который содержит данные в следующем формате. Я пишу задачу индексирования для друида, чтобы глотать данные. Он отказывается из-за метки времени (event_time).Замена/установка метки времени в файле

Есть ли способ, чтобы преобразовать значение event_time в 2016-11-30T23: 59: 53.654Z из 2016-11-30 23: 59: 53.654000?

JSON файла:

{"app":14232,"device_carrier":"airtel","$schema":10,"city":"Bellary","user_id":"234293","uuid":"1d5b5328-b729-11e2-a0e5-22340a56812f","event_time":"2016-11-30 23:59:53.654000","platform":"Android","os_version":"4.4.2","insider_id":3426766963,"processed_time":"2016-12-01 00:00:05.429064","user_creation_time":"2015-12-14 18:34:04.632000","version_name":"2.08","ip_address":"117.266.132.112","paying":"true","dma":null,"user_properties":{"[SauceFlyer] campaign":"N\/A","[SauceFlyer] media source":"Chemical"},"client_upload_time":"2016-12-01 00:00:03.982000","$insert_id":"e43b2a4d-072f-2322-bd74-6bdb0b2e1f63","event_type":"Search","library":"insider-android\/2.9.2","device_type":"Micromax Owen Nitro","device_manufacturer":"Micromax","start_version":"1.57","location_lng":null,"server_upload_time":"2016-12-01 00:00:04.230000","event_id":286,"location_lat":null,"os_name":"android","insider_event_type":null,"device_brand":"Micromax","groups":{},"event_properties":{"Search Query":"clutches for women"},"data":{},"device_id":"ff71c4f0-81b8-4a44-8db1-1555e22f6761R","language":"English","device_model":"Micromax A310","country":"India","region":"Karnataka","adid":null,"session_id":1480550372776,"device_family":"Micromax Phone","idfa":null,"client_event_time":"2016-11-30 23:59:53.406000"}

ответ

1

Если вход в input.json, и вы хотите сделать это с СЭД:

sed 's/\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\) \([0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\.[0-9]\{3\}\)[0-9]\{3\}/\1T\2Z/g' input.json 

(Да, я согласен, что это некрасиво.) Он заменяет все отметки времени на вашем входе, однако, предполагая, что это то, что вы хотите. Если нет, вы должны расширить регулярное выражение так же, как и до ключа.

Эквивалентное Perl один вкладыш «для лучшей читаемости»:

cat input.json | perl -p -e 's/(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2}.\d{3})\d{3}/\1T\2Z/g' 
+0

Как мы можем включить ключ перед этой меткой времени. например event_time с sed? –

+0

Спасибо, Ян. Получил это. sed 's/"event \ _time":. \ ([0-9] \ {4 \} - [0-9] \ {2 \} - [0-9] \ {2 \} \) \ ([0-9] \ {2 \}: [0-9] \ {2 \}:. [0-9] \ {2 \} \ [0-9] \ {3 \} \) [0- 9] \ {3 \}/"event \ _time": \ 1T \ 2Z/g 'sample.json –

2

Другой подход с СЭД (потому что год, месяц, день, часы, минуты и секунды не только [0-9] цифры):

$ sed 's/\([12][0-9]\{3\}-[01][0-9]-[0-3][0-9]\) \([0-2][0-9]\(:[0-5][0-9]\)\{2\}\.[0-9]\{3\}\)000/\1T\2Z/' <<< "2016-11-30 23:59:53.654000" 
2016-11-30T23:59:53.654Z 

 Смежные вопросы

  • Нет связанных вопросов^_^