Regex Powershell:基于两列比较两个文件

Regex Powershell:基于两列比较两个文件,regex,powershell,Regex,Powershell,早上好,来自德国,很抱歉我的英语不好 我希望有人能帮助我 我们必须将2.xls或.csv文档与4000多行进行比较。 两份文件的E列具有相同的交货通知单编号。 此送货单编号不是唯一的,该编号可在E列中多次使用。 每个交货通知单编号在D列中也有若干件 如果两个文件中的交货通知单编号和数量匹配,我们可以忽略并删除该行。 比较两个超过4000行的文件非常昂贵,因此我希望可以使用Powershell正则表达式进行比较 我的想法是: 将xls转换为csv并执行以下操作: 阅读行并使用E列和D列的条目。对于

早上好,来自德国,很抱歉我的英语不好

我希望有人能帮助我

我们必须将2.xls或.csv文档与4000多行进行比较。 两份文件的E列具有相同的交货通知单编号。 此送货单编号不是唯一的,该编号可在E列中多次使用。 每个交货通知单编号在D列中也有若干件

如果两个文件中的交货通知单编号和数量匹配,我们可以忽略并删除该行。 比较两个超过4000行的文件非常昂贵,因此我希望可以使用Powershell正则表达式进行比较

我的想法是: 将xls转换为csv并执行以下操作: 阅读行并使用E列和D列的条目。对于E列的每个条目,检查第二个文件中是否存在此条目。如果条目存在,请检查D列是否与文件1中的相同。 如果两个入口都匹配,请删除或复制两个文件中的两行

至少我们有两份没有任务的文件

这可能吗

使用PowerShell我可以很好地处理,但是使用正则表达式。。。 :/

提前谢谢
Daniel

如果你把你的两个值看作一个复合主键,它似乎是可行的。您说过E列中的第一个值不一定是唯一的。你能告诉我,如果和数量结合起来,它是否总是独一无二的吗

无论如何,我建议,为了处理这个问题,为了得到(列E,列D)组合的唯一列表,你甚至可以只取一个“E,D”格式的字符串,只要列E和列D不包含逗号。获取此唯一值后,将其放入哈希表中,格式化值作为键,该键的文件数组作为值


现在您有了一种方法,可以高效地查找E、D列组合中存在的文件,因此您应该能够根据需要处理特定的用例。

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


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

谢谢你的帖子,不,它不是独一无二的。具有相同内容的多个值是可能的!例如:我们的送货单编号为453535,数量为30件。有可能我们又有同样的订单了。你怎么知道那个订单已经完成了?对不起,我觉得太复杂了。否则我们将不得不解决这个问题。可能地有Excel和大量的手工工作。对不起,我还记得双方的金额有正负之差。数量是相同的,在文件1中上升,在文件2中下降。谢谢很抱歉迟了回复!这个想法是好的,但不幸的是不适合我的目的,因为amound不同于符号-或+。
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