2017-07-07 197 views
-1

我想比较具有不同数量的内容的两个巨大的CSV文件。只有一列包含相同的值,例如它们也存在于同一列中的另一个文件中,这个值要大得多。比较两个CSV文件的列并删除差异

所以我想保留其中一个文件的行中第二个文件中具有相同值的行也存在。

例子:

File a 
value1,value2,value3,... 
value4,value5,value6,... 
value7,value8,value9,... 

File b: 
value10,value2,value11,... 
value12,value13,value14,... 

最终文件B(或者一个完整的新文件)应该是这样的:

value10,value2,value11,... 

我不相信它是很难,但此刻我不知道如何做到这一点。我怎么能用linux工具或bash/python脚本来达到目标​​?

感谢您的任何提示!

+0

基本上你想实现B.Columns-A.Colums? –

+1

什么是“巨大”以及文件大小(和行数)的差异有多大? – hop

+0

@ChetanKulkarni正确,想摆脱与一列相关的差异。 – Kay

回答

0

在AWK:

$ awk -F, ' 
NR==FNR {    # hash elements in the first file to a 
    for(i=1;i<=NF;i++) 
     a[$i] 
    next 
} 
{      # second file 
    for(i=1;i<=NF;i++) # go thru all elements 
     if($i in a) { # if match 
      print  # output 
      next  # and skip to next record 
     } 
    } 
' file1 file2 
value10,value2,value11 

这一个散列在存储器中的第一个文件。如果按巨大的你的意思是你的记忆力超过你的能力,这可能不是你的解决方案。

+0

嗯,“巨大”可能不是正确的术语。它可以由内存处理。我认为这有帮助。谢谢! – Kay