我需要比较两个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//
}
这有没有意义?希望有人可以提供建议。
由于
答案 0 :(得分:0)
我会选择另一种方法,因为它是json,只需用您喜欢的脚本语言读取文件即可读取/解析json。
类似的东西:
伪代码:
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可能会更好/更简单。
当然有更优雅的方法来解决这个问题,这就是我接近它的方式。