我想比较两个具有不同数量的大型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脚本到达那里?

感谢您的提示!

最佳答案

在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


这会散列内存中的第一个文件。如果您的意思远远超出您的记忆能力,那么这可能不是您的解决方案。

10-07 16:27
查看更多