比较和匹配2个CSV文件

我有2个文件(两个文件都是> 1,000,000行):

第一个文件只包含一个md5散列

第二个文件包含md5; emailadress

现在我必须比较这两个文件,如果md5哈希是相同的 – >写在一个单独的文件emailadress。

我尝试了与MySQL和join

SELECT `email` FROM `intern` INNER JOIN `extern` ON `intern`.`md5` = `extern`.`md5` 

并阅读2 csv并比较它在2个循环。 的NodeJS:

  fs.readFile('public/md5-data/reachadout.csv', (err, internFile) => { fs.readFile('public/md5-data/customer.csv', (err, externFile) => { var internLines = internFile.toString().split('\n'); var externLines = externFile.toString().split('\n'); internLines.forEach(function(iLine){ var internCells = iLine.split(';'); if(externLines.indexOf(internCells[0]) > -1){ fs.appendFileSync('public/md5-data/blacklist.csv', internCells[1] + '\n'); } }) }) }) 

两种方式都非常慢。 有没有人为我另一个algorithm或解决scheme?

相反,做一个查找对象,在那里你可以查找散列是否在externFile我修改你的代码来做到这一点

 fs.readFile('public/md5-data/reachadout.csv', (err, internFile) => { fs.readFile('public/md5-data/customer.csv', (err, externFile) => { var internLines = internFile.toString().split('\n'); var externLines = externFile.toString().split('\n'); var externLookup = {}; //Added line externLines.forEach(function (eLine){ //Added line externLookup[eLine] = true; //Added line }); //Added line internLines.forEach(function(iLine){ var internCells = iLine.split(';'); if(externLookup[internCells[0]]){ //Changed line fs.appendFileSync('public/md5-data/blacklist.csv', internCells[1] + '\n'); } }) }) }) 

你的代码最大的问题是“InternFile”中的每一行都必须检查externfile中的每一行,看看是否匹配。 如果你像我这样做了一个对象,查询对象是否存在就快很多了

编辑:或者,你可以像你这样使用SQL,但是你必须添加一个INDEX到hash_column。