2013-02-28 65 views
0

来自德国的早上好,抱歉我的英语不好。Powershell:比较2列基于2列的文件

我希望有人能帮助我。

我们必须比较2 .xls或.csv文件和4000多行。 这两份文件都有一个具有相同交货单编号的E栏。 这送货单号不是唯一的,可以是使用次数多次在列E. 每一个交货单号也有在列D

的件数如果两个文件送货单号和数量匹配,我们可以忽略并删除该行。 比较超过4000行的两个文件是非常昂贵的,所以我希望能够与Powershell进行正则表达式的比较。

我的想法: 转换XLS到CSV和执行以下操作: 阅读线和使用E列和列E列的D.的foreach项的entry,检查是否在第二文件存在这个条目。如果条目存在,请检查D列是否与file1中的相同。 如果两个Entrys匹配,请删除或复制两个文件中的两条线。

至少我们有两个Entrys文件,这些文件没有任务。

这可能吗?

通过PowerShell的我能处理得很好,但是正则表达式... :/

在此先感谢 丹尼尔

回答

0

如果你认为你的两个值作为一个复合主键,它似乎工作。你说E栏中的第一个值不一定是唯一的。你能否告诉我它是否与其数量相结合时总是独一无二的?无论如何,我建议,为了处理这个问题,仅仅为了获得(Col E,col D)组合的唯一列表,甚至可以只采用“E,D”格式的字符串,只要col E和col D不包含逗号。得到这个唯一值后,把它放在一个散列表中,其格式化值作为键,并将该键的文件数组作为值。

现在您可以有效地查找Col E,Col D组合的哪些文件,因此您应该能够根据需要处理您的特定用例。

+0

感谢邮政,不是它不唯一。具有相同内容的多个值是可能的!例如:我们有交货单号453535,数量为30件。我们有可能再次拥有相同的东西。 – Daniel4711 2013-02-28 11:20:49

+0

你怎么知道哪个订单已经履行了? – 2013-02-28 12:01:18

+0

对不起,我认为这太复杂了。否则我们将不得不解决问题。有可能。用Excel和大量的手工工作。 – Daniel4711 2013-03-03 11:11:45

0

4000行听起来不是很多。试试这个:假设CSV文件被称为 “1.csv” 和 “2.csv”

add-content 3.csv (get-content 1.csv) 
add-content 3.csv (get-content 2.csv) 

import-csv -header A,B,C,D,E,F 3.csv | 
    group E,D | 
    where { $_.count -eq 1 } | 
    foreach { $_.group } | 
    export-csv 3.diff.csv -noTypeInformation 

“3.diff.csv” 将只包含唯一的记录。

+0

不好意思,我还记得双方的金额是有差别的。数量是相同的,在文件1中上升,在文件2中下降。谢谢! – Daniel4711 2013-03-01 09:17:55

+0

没问题。那么这个解决方案对你有用吗? – Aryadev 2013-03-01 09:58:16

+0

对不起,回复迟!这个想法很好,但不幸的是不适合我的目的,因为这个音符不同于符号 - 或+。 – Daniel4711 2013-03-03 11:08:05