2016-12-12 5 views
0

J'ai plusieurs fichiers manifestes s3 correspondant chacun à une date pour une plage de dates donnée. Je cherche à fusionner tous les fichiers manifest pour générer un seul fichier manifeste, me permettant ainsi d'effectuer une seule copie Redshift.fusion de fichiers manifestes s3 en utilisant jq

fichier manifeste 1:

{ 
    "entries": [ 
     { 
      "url": "DFA/20161001/394007-OMD-Coles/dcm_account394007_activity_20160930_20161001_050403_294198927.csv.gz" 
     } 
    ] 
} 

fichier manifeste 2:

{ 
    "entries": [ 
     { 
      "url": "DFA/20161002/394007-OMD-Coles/dcm_account394007_activity_20161001_20161002_054043_294865863.csv.gz" 
     } 
    ] 
} 

Je cherche une sortie comme: -

{ 
    "entries": [ 
     { 
      "url": "DFA/20161001/394007-OMD-Coles/dcm_account394007_activity_20160930_20161001_050403_294198927.csv.gz" 
     }, 
     { 
      "url": "DFA/20161002/394007-OMD-Coles/dcm_account394007_activity_20161001_20161002_054043_294865863.csv.gz" 
     } 
    ] 
} 

J'ai essayé

Et d'autres suggestions postées dans Stackoverflow mais n'ont pas pu le faire fonctionner.
jq -s '.[]' "manifest_file1.json" "manifest_file2.json" 

+0

Vous réalisez que votre résultat attendu est obtenu à l'aide d'un objet avec des clés en double à droite? –

Répondre

1

Ou, sans le recours à reduce:

$ jq -n '{entries: [inputs.entries[]]}' manifest_file_{1,2}.json 
{ 
    "entries": [ 
    { 
     "url": "DFA/20161001/394007-OMD-Coles/dcm_account394007_activity_20160930_20161001_050403_294198927.csv.gz" 
    }, 
    { 
     "url": "DFA/20161002/394007-OMD-Coles/dcm_account394007_activity_20161001_20161002_054043_294865863.csv.gz" 
    } 
] 
} 

Notez que inputs a été introduit dans jq version 1.5. Si votre JQ n'a pas inputs, vous pouvez utiliser jq -s comme suit:

$ jq -s '{entries: [.[].entries[]]}' manifest_file_{1,2}.json 
0

Donc, si par « fusion » vous voulez dire de combiner les "entries" tableaux en un seul tableau en les enchaînant, vous pouvez le faire:

$ jq 'reduce inputs as $i (.; .entries += $i.entries)' manifest_file{1,2}.json 

Ce qui donne:

{ 
    "entries": [ 
    { 
     "url": "DFA/20161001/394007-OMD-Coles/dcm_account394007_activity_20160930_20161001_050403_294198927.csv.gz" 
    }, 
    { 
     "url": "DFA/20161002/394007-OMD-Coles/dcm_account394007_activity_20161001_20161002_054043_294865863.csv.gz" 
    } 
    ] 
}