2017-02-27 8 views
0

私は私に、このような(実際にはより多くの属性を持つ)これらのようjsonsを返すAPIと対話しています:jsonをタイムスタンプに基づいてフィルタリングするにはどうすればよいですか? UNIX

{"timestamp": {"$date": 1488192218325}, "_id":103482} 
{"timestamp": {"$date": 1488192216265}, "_id":302719} 
{"timestamp": {"$date": 1588192216260}, "_id":302719} 

と私はタイムスタンプに基づいてこれらのJSONをフィルタリングします。私は2つの日付(1488192216263と1488192216269)の間のjsonだけを望んでいます。私の期待される出力は:

{"timestamp": {"$date": 1488192216265}, "_id":302719} 

どのようにすればいいですか? grepやawkを使うことはできますか?

ありがとうございます。

+0

あなたの予想される出力は何ですか? –

+0

これまでに何を試しましたか? –

+0

@JamesJithin私はawk '$ 2〜 "&& $ 2>" 1488192216263 "&& $ 2 <" 1488192216269 "' –

答えて

2

awksedまたはgrepは、テキストを操作するための優れたツールです。しかし、彼らはjsonで働くことにうまくいきません。 JSON文書で作業するjqを使用します。

jq -s --argjson low "1488192216263" --argjson up "1488192216269" \ 
    '.[]|select(.timestamp["$date"]>=$low and .timestamp["$date"]<=$up)' file.json 
+1

これはjson '++'のための正しいツールです –

+0

良い解決策ですが、awkやgrepを使って別の解決策を知っていますか?私はサーバ上で作業しているので、jqを持っていません:( –

+1

@cdwcewインストールするか、Pythonを使用するかもしれません。いずれのサーバもPythonに付属しています – hek2mgl

0

次awkがあなたを取得します:

awk -F '[^0-9]+' '{ if ($2 >= 1488192216263 && $2 <= 1488192216269) print $0 }' jsonfile.json 
+1

'lower '境界が' 148819221753'と 'upper'境界です'148819231291'?境界が変わったときにいつでも正規表現を書き直すことをお勧めしますか? – hek2mgl

+0

@ hek2mgl、指摘ありがとう!awkに変更しました:D –

+0

James、この場合、タイムスタンプを印刷するだけです。 :) –

0

これを試してみてください -

gawk -F'[{} ]' '($6 > 1488192216263 && $6 < 1488192216269)' timestamp 
関連する問題