【问题标题】:Compare columns of two CSV files and delete differences比较两个 CSV 文件的列并删除差异
【发布时间】:2017-07-07 09:42:12
【问题描述】:

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

感谢任何提示!

【问题讨论】:

  • 基本上你想实现 B.Columns-A.Colums ?
  • 什么是“巨大”,文件大小(和行数)的差异有多大?
  • @ChetanKulkarni 正确,希望消除与一列相关的差异。
  • @hop 大约 166000 (76MB) 行,而大约 56000 (18MB) 行
  • @Kay:这叫小

标签: python linux bash csv compare


【解决方案1】:

在 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 你的意思是超过你的内存可以处理,这可能不是你的解决方案。

【讨论】:

  • 嗯,“巨大”可能不是正确的术语。它可以由内存处理。我认为这有帮助。谢谢!
猜你喜欢
  • 2014-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
  • 2013-06-17
  • 2016-12-24
相关资源
最近更新 更多