2015-07-30 2 views
0

J'ai besoin de comparer deux fichiers txt (json). Je pense que grep & sont ce dont j'ai besoin? mais je suis très nouveau pour Linux/programmation.Recherche Grep - Trouver des données dupliquées après un mot spécifique

C'est la recherche que je besoin fait:

Rechercher: "PRODID" dans les deux documents.

Rechercher 7 caractères après "prodId" dans les deux documents. Si des correspondances sont trouvées, changez le lien après le mot "lien".

Comment cela peut-il être réalisé sous Linux? Ouvert à d'autres solutions aussi.

Exemple:

Fichier 1

{ 
"name":"StackOver" 
"objectId": "52cZWVYWun", 
"price": "62.00", 
"prodId": "511040", 
"link": "www.link.com/1", 

}, 
{ 
"name":"Stackunder" 
"objectId": "28iuo899sum", 
"price": "10.00", 
"prodId": "524240", 
"link": "www.link.com/2", 
} 

Fichier 2

{ 
"name":"Name1" 
"objectId": "126WVYWwzzn", 
"price": "2.00", 
"prodId": "546040", 
"link": "www.link.com/1_abcd", 
}, 
{ 
"name":"Name2" 
"objectId": "2wrw23um", 
"price": "115.00", 
"prodId": "524240", 
"link": "www.link.com/2_abcd", 
} 

Résultat souhaité

Où duplicate trouvé après "prodID", le changement "lien": "xx" pour le lien qui existe dans Fichier 1

Fichier 1

{ 
"name":"Stackunder" 
"objectId": "28iuo899sum", 
"price": "10.00", 
"prodId": "524240", 
"link": "www.link.com/2_abcd", //REPLACES this line data only IF a duplicate existed in File 2// 
} 

Est-ce que cela a plus de sens? J'espère que quelqu'un peut conseiller.

Merci

+0

avez-vous essayé quelque chose ??? regarder dans grep, sed, uniq –

+1

S'il vous plaît fournir un exemple de texte à la fois les documents et le résultat de l'échantillon. – sras

+0

Merci - J'ai mis à jour l'exemple. J'ai essayé d'utiliser grep/diff, mais je suis très nouveau sur Linux, donc je n'arrive pas à comprendre comment ça fonctionne. – Ycon

Répondre

0

Je choisirais une autre approche car il est JSON, juste de lire les fichiers avec votre langage de script favori qui peut lire/parse JSON.

Quelque chose comme:

  1. Parse Fichier1 dans un tableau d'objets JSON
  2. Parse Fichier2 de la même manière dans un autre tableau
  3. Ensuite, vous pourriez avoir deux boucles, par exemple:

pseudocode:

foreach obj in File1: 
    foreach obj2 in File2: 
     if obj.prodId == obj2.prodId: 
      obj.link = obj2.link 
      remove obj2 from File2 

Si vous avez plusieurs doublons, le dernier trouvé sera affecté à obj.

La boucle externe s'exécutera pour chaque objet de File1, de sorte que tous les objets de File2 seront testés par rapport au premier élément de File1 et ainsi de suite. Vous pouvez ensuite supprimer le doublon de votre tableau File2 de sorte que dans la prochaine boucle, vous aurez un élément de moins à vérifier.Vous pouvez bien sûr toujours utiliser grep et diff et d'autres outils comme sed/awk mais je pense que l'utilisation de python, perl ou php pourrait être meilleure/plus simple pour ce genre de travail.

Il y a bien sûr des façons beaucoup plus élégantes de résoudre ce problème, c'est ainsi que je l'aborderais.