【发布时间】:2016-10-23 12:08:17
【问题描述】:
我有 2 个大(比如 300,000 * 100)矩形 csv 文件,它们具有相同数量的相应行和列。我需要找出 2 个文件中每个对应单元格之间的差异(如果有的话)。 程序应该o/p不同的行号和单元格号以及不同的内容。
由于行/列的数量非常大,我正在寻找最有效的方法。
最初我开始使用 awk 进行探索,this 看起来很有希望,但我之前没有使用过 awk 并且未能成功地将其扩展到 100 列而不是示例中的 2 列
接下来,我尝试了一种使用 Java 的蛮力方法 - 将文件加载到 2 个二维数组中。初始化 100 个线程,每个线程处理给定的列,当发现差异时,每个线程将行、单元格和差异值放入 HashMap(以列号为 Key)。我确实尝试通过在将第二个文件读入数组时进行比较来优化它,但实际上因为我正在访问每个单元格,所以它不可能很快(花了将近 8 个小时来完成比较)
我可以使用 awk 或 Java。并对任何其他完全不同的方法持开放态度。
【问题讨论】:
-
只使用
diff来检查文件中的差异怎么样?输出可以存储在文件中或在脚本中使用以进一步分析并采取适当的措施。 -
这正是当前程序正在做的事情。 diff 只打印整行,在许多情况下,从左侧文件中打印 10 行,然后在右侧文件中打印 10 行。因此,必须手动复制到 excel 中并在视觉上比较每一列。请注意,90% 的行有一些差异。所以差异 o/p 非常大
-
那么让excel来整理呢?没有完全跟上它的功能,但我相信一些矩阵搜索可以应用于多个选项卡并可能更改背景颜色?
-
需要一些信息:您预计线路平均有多少差异?另外,数据类型是什么?混合(文本/日期/数字)还是仅数字?
-
每行介于 1 - 10 之间。数据好坏参半。在 80% 的情况下,如果某一列的行中出现差异,则大多数行中都会出现相同的情况。所以我现在正在考虑进行选择性比较(也许一些逻辑只遍历部分行,修复导致差异的问题并重新运行,这将导致它比较其他行)尚不清楚,但这些行上的东西会乐于助人