2017-01-12 1 views
0

を照合JQ from_entriesの変種私はfrom_entriesと同じように動作フィルタを実行するために、JQを使用することができ、同じキーに対して複数のエントリが発生した場合は、1つの違いがあることで、それはに値を照合しますが最後の値を使用するのではなく、配列を使用しますか?各キーの出現の値

もしそうなら、これを達成するフィルターは何ですか?私の入力がある場合、例えば:

[ 
    { 
    "key": "a", 
    "value": 1 
    }, 
    { 
    "key": "b", 
    "value": 2 
    }, 
    { 
    "key": "a", 
    "value": 3 
    }, 
    { 
    "key": "b", 
    "value": 4 
    } 
] 

所望の出力は次のようになります

{ "a": [1,3], "b": [2,4] } 

注フィルタとして「from_entries」のみを使用して、得られた値は(単に最後の値である、ことそれはあなたの例とmerge.jqの次の行では、{ "a": 3, "b": 4 }

答えて

1

です:

def merge_entries: 
    reduce .[] as $pair ({}; .[$pair["key"]] += [$pair["value"]]); 

merge_entries 

呼び出し:JQ -c -f merge.jq 利回り:

jq 'reduce .[] as $p ({}; .[$p.key] += [$p.value])' 
+0

完璧に動作します:

{"a":[1,3],"b":[2,4]} 

また、呼び出しを使用することができます。ありがとうございました! – mwag

+0

元の質問を誤解して申し訳ありません。私は最初の段落のいくつかの側面に気を散らしました。今でも、同じキーの複数のエントリが存在する場合、何が行われなければならないかを指定することなく、「それがそうでない場合、 – peak

+0

いいえ、あなたは正しいです。私はある角度から書いていき、途中で切り替えて、一貫性を持たせるために始めを更新しなかった。私はあなたの最後のコメントごとにさらに絞って更新しました、うまくいけば今よりいいです。タイ – mwag

関連する問題