比较两个CSV文件的列并删除差异

时间:2017-07-07 09:42:12

标签: python linux bash csv compare

我想将两个巨大的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脚本到达那里?

感谢任何提示!

1 个答案:

答案 0 :(得分: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

这个哈希第一个文件在内存中。如果通过 huge 你的意思是超过你的内存可以处理,这可能不是你的解决方案。