jq JSONプロセッサを使用して、ここでtimestamp
フィールドを削除します。
[
{
"timestamp": 1448369447295,
"group": "employees",
"uid": "elgalu"
},
{
"timestamp": 1448369447296,
"group": "employees",
"uid": "mike"
},
{
"timestamp": 1448369786667,
"group": "services",
"uid": "pacts"
}
]
ホワイトリストも機能します。つまり、select uid, group
最終的に私が本当に欲しいのは、次のような一意の値を持つリストです。
employees,elgalu
employees,mike
services,pacts
タイムスタンプを削除するだけの場合は、del()
関数を使用できます。
_jq 'del(.[].timestamp)' input.json
_
ただし、目的の出力を実現するには、del()
関数を使用しません。出力に表示するフィールドがわかっているので、配列にgroup
とid
を入力し、join()
関数を使用するだけです。
_jq -r '.[]|[.group,.uid]|join(",")' input.json
_
_-r
_はraw ouputを表します。 jq
は、値を引用符で囲みません。
出力:
_employees,elgalu
employees,mike
services,pacts
_
記録として、代替案は次のようになります。
$ jq -r '.[] | "\(.uid),\(.group)"' input.json
(ホワイトリストのアプローチにより、順序の再配置が容易になり、このバリアントにより、間隔の変更などが容易になります。)
次の例は、安全なCSV(つまり、値にコンマまたは改行文字が埋め込まれている場合でも)を必要とするすべてのユーザーにとって興味深いものです。
$ jq -r '.[] | [.uid, .group] | @csv' input.json
"elgalu","employees"
"mike","employees"
"pacts","services"