2016-04-12 21 views
0

Verilen iki csv dosyalarından eşleşmeleri düşeriz:iki csv dosyalarını karşılaştırın ve özgün

 
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 
Ben yeni csv dosyası oluşturmak istiyorum

, biz File1 her bir girişe sahip UpdatedList.csv, diyeceğiz. CSV hem File1.csv hem de File2.csv dosyasında bulunan csv eksi satırları. Bu durumda UpdatedList.csv Aşağıdaki kod istediğimi yapacağım

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

gibi görünecek ama daha verimli bir yolu var olduğuna inanıyoruz. Bunu döngüler olmadan nasıl yapabilirim? Benim kodum şu şekildedir.

#### 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" 
################################ 
Sen Grup-Object komutuna yararlanarak gevreksiz yapabilirsiniz

cevap

1

:

$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 
İlgili konular