当前位置: 首页 > 知识库问答 >
问题:

比较两个csv文件并从原始文件中扣除匹配项

琴英华
2023-03-14

给定两个csv文件:

File1.csv
SKU,Description,UPC
101,Saw,101010103
102,Drill,101010102
103,Screw,101010101
104,Nail,101010104

File2.csv
SKU,Description,UPC
100,Light,101010105
101,Saw,101010103
104,Nail,101010104
106,Battery,101010106
108,Bucket,101010114

我想创建一个新的csv文件,我们将调用UpdatedList.csv,它具有来自File1.csv的每个条目减去SKU在File1.csv和File2.csv.的任何行

UpdatedList.csv
"SKU","Description","UPC"
"102","Drill","101010102"
"103","Screw","101010101"

下面的代码会做我想做的,但是我相信有一个更有效的方法。没有循环我怎么能做到这一点?我的代码如下。

#### Create a third file that has all elements of file 1 minus those in file 2 ###
$FileName1 = Get-FileName "C:\LowInventory"
$FileName2 = Get-FileName "C:\LowInventory"
$f1 = ipcsv $FileName1
$f2 = ipcsv $FileName2
$f3 = ipcsv $FileName1
For($i=0; $i -lt $f1.length; $i++){
For($j=0; $j -lt $f2.length; $j++){
if ($f1[$i].SKU -eq $f2[$j].SKU){$f3[$i].SKU = 0}
}
}
$f3 | Where-Object {$_.SKU -ne "0"} | epcsv "C:\LowInventory\UpdatedList.csv" -NoTypeInformation
Invoke-Item "C:\LowInventory\UpdatedList.csv"
################################

共有1个答案

闾丘冠玉
2023-03-14

通过利用Group Object cmdlet,您可以在不使用循环的情况下执行此操作:

$f1 = ipcsv File1.csv;
$f2 = ipcsv File2.csv;
$f1.ForEach({Add-Member -InputObject $_ 'X' 0}) # So we can select these after
$f1 + $f2                  | # merge our lists
    group SKU              | # group by SKU
    where {$_.Count -eq 1} | # select ones with unique SKU
    select -expand Group   | # ungroup
    where {$_.X -eq 0}       # where from file1
 类似资料:
  • 问题内容: 我需要比较两个CSV文件并在第三个CSV文件中打印出差异。在我的情况下,第一个CSV是一个名为old.csv的哈希表的旧列表,第二个CSV是包含新旧哈希表的新哈希表。 这是我的代码: 第三个文件是旧文件的副本,而不是更新文件。怎么了 ?我希望你能帮助我,非常感谢! PS:我不想使用diff 问题答案: 问题在于您正在将中的每一行与中的同一行进行比较。只要一个文件中有多余的一行,您就会发

  • 我有两个文件file1。txt和file2。txt。 文件1。文本 file2.txt 我想匹配文件1的第1、2和3列。带有文件2第1、4和5列的txt。txt。如果匹配,则将匹配行与以下行一起打印,直到,但不要打印。我用“awk”命令试过了

  • 我有两个文件-file1.txt和file2.txt。我想用powershell比较这两个文件,并生成第三个文件(file3.txt),它包含从file1.txt开始的所有行减去file2.txt中的行 你能想出什么办法来做这件事吗?

  • 我在Visual Studio中看到了新的比较工具 有没有一种方法,我可以只是比较两个文件与内置的功能在Visual

  • 嗨,我有两个自定义数组列表,我想从一个数组列表中删除与第二个数组列表匹配的类似项。