Grep搜索 - 在特定单词后查找重复数据

时间:2015-07-30 07:16:21

标签: linux unix replace grep diff

我需要比较两个txt文件(json)。我认为grep&差异是我需要的吗?但我对linux /编程非常陌生。

这是我需要完成的搜索:

寻找:" prodId"在两份文件中。

在" prodId"之后搜索7个字符在两份文件中。如果找到匹配项,请在单词" link"。

之后更改链接

如何在Linux中实现这一目标?也可以使用其他解决方案。

示例:

文件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",
}

文件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",
}

期望的结果

在" prodID"之后发现重复的地方,更改"链接":" xx"链接文件1

中存在的内容

文件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//
}

这有没有意义?希望有人可以提供建议。

由于

1 个答案:

答案 0 :(得分:0)

我会选择另一种方法,因为它是json,只需用您喜欢的脚本语言读取文件即可读取/解析json。

类似的东西:

  1. 将File1解析为json对象数组
  2. 在另一个数组中以相同的方式解析File2
  3. 然后你可以有两个循环,例如:
  4. 伪代码:

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

    如果您有多个重复项,则找到的最后一个重复项将被分配给obj。

    外部循环将为File1中的每个对象运行,因此File2中的每个对象都将针对File1中的第一个元素进行测试,依此类推。然后,您可以从阵列File2中删除副本,因此在下一个循环中,您将只需要少一个要检查的元素。

    你当然可以使用grep和diff以及sed / awk等其他工具,但我认为使用python,perl或php可能会更好/更简单。

    当然有更优雅的方法来解决这个问题,这就是我接近它的方式。