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

标签 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 脚本到达那里?

感谢您的任何提示!

最佳答案

在 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

这个对内存中的第一个文件进行哈希处理。如果巨大您的意思是超出您的内存可以处理的范围,那么这可能不是适合您的解决方案。

关于python - 比较两个 CSV 文件的列并删除差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44967586/

相关文章:

python - 将回历(伊斯兰日期)转换为公历

python - 如何在 Python 中对我的 Dataframe 的每一列进行 ADF 测试?

Python 匹配并返回中间的字符串

python - 使用 python 正则表达式匹配字符串中间的管道字符

linux - 如何从文本文件添加用户并生成随 secret 码 Fedora

linux - 如何将 jar 文件复制到单个目录中可用的多个目录

Linux 不显示添加的组

linux - VBA SendKeys 到特定窗口

通过管道传输到 BASH 的 python 打印输出导致 "broken pipe"

linux - DD 脚本和操作数预期错误