【发布时间】:2014-11-21 10:35:19
【问题描述】:
我有两个非常大的 .txt 文件(约 50 万行)。我需要从两个文件中取出两列(按列名)并将它们相互比较(类似于 LEFT JOIN 在 SQL 中的工作方式)。因此,我需要将第一个文件中两列中不存在于第二个文件中的所有值组合输出到第三个 txt/csv 文件。
我需要自动化这个过程,所以我应该能够从命令行调用它。如果有人能指出我正确的方向,我将不胜感激。
更新 文件的格式完全相同,所需的列永远不会为空。
示例
第一个文件
数据源;顾客;城市;映射;苏格集团
艺术;约翰;伦敦;强尼;伦敦客户
艺术;克里斯;慕尼黑;乔恩斯;德国
联邦调查局;玛丽;伦敦;詹姆士;德国
第二个文件
数据源;顾客;城市;映射;苏格集团
艺术;克里斯;慕尼黑;乔恩斯;德国
联邦调查局;玛丽;伦敦;詹姆士;德国
我需要做的是获取两列:客户和映射。并找到第一个文件中而不是第二个文件中的行。因此,在给定的示例中,输出文件如下所示:
输出文件:
客户;映射
约翰;强尼
【问题讨论】:
-
创建数据库,将字符串添加到表中并执行 LEFT JOIN? ;)
-
@duDE 已经在这样做了。由于客户端环境的问题,速度很慢。所以试着想出别的东西。
-
您可以使用
Import-Csv轻松导入文件,然后只选择您需要的列到compare-Object。假设您的文件是分隔的,那是当然的,否则您将不得不手动分隔它们。然而,内存中的 100 万行数据对于 powershell 来说可能很困难 -
您当然知道 cmd 本质上是 s-l-o-w 。也许可以做到 - 尝试给我们一个小样本(只有几行,最好带有标题。)然后准备其他问题,例如分隔符是什么,可能有多少独特的组合,是否有空列,是这实际上是固定列格式吗?您希望能够按名称选择列还是仅限于已知列?这两个文件的布局是否相同?哦 - 一些你想做的事情的例子将是无价的。
标签: windows powershell text cmd