2017-04-20 35 views
-2

首次使用powershell。 我有2个csv文件。每个列具有不同的数量,并且具有不同的条目数量并且不以相同的顺序。在共同列的基础上比较两个具有不同列编号的CSV文件

这里是前几行

的一些例子File1.csv

Name,Alias,Category 
    Comdty,CONTRACT FOR DIFFERENCE,Future 
    Comdty,Calendar Spread Option,Future 
    Corp,Bond,FixedIncome 
    Corp,EURO-DOLLAR,FixedIncome 
    Corp,FLOORSPREAD,FixedIncome 
    Corp,FRA,FixedIncome 

File2.CSV

Alias,Category 
EURO-DOLLAR,FixedIncome 
Bond,FixedIncome 
Preferred,Equity 

我需要比较使用基于Alias列的PowerShell脚本的文件,并将匹配值一起显示,并显示两个文件中不存在值的空白处。 喜欢的东西:

Alias,Alias, Category ------------------------- MacthCase 
    ___,CONTRACT FOR DIFFERENCE,Future ------------ false 
    ___,Calendar Spread Option,Future ------------- false 
    Bond,Bond,FixedIncome ------------------------- true 
    EURO-DOLLAR,EURO-DOLLAR,FixedIncome ----------- true 
    ___,FLOORSPREAD,FixedIncome ------------------- false 
    ___,FRA,FixedIncome --------------------------- false 
    Preferred,___,Equity -------------------------- false 

回答

1

试试这个

#import files with select columns 
$file1=import-csv C:\temp\file1.csv | select Alias,Category, @{N="file";E={"file1"}} 
$file2=import-csv C:\temp\file2.csv | select Alias,Category, @{N="file";E={"file2"}} 

#merge into one list object 
$allfile=$file1 
$allfile+=$file2 

#group by Alias and build objects result 
$allfile | group Alias | foreach{ 

    if ($_.Count -ge 2) 
    { 
     [pscustomobject]@{Alias1=$_.Name;Alias2=$_.Name;Categorie=$_.Group.Category[0];MatchCase=$true} 
    } 
    else 
    { 
     if ($_.Group.file -eq "file1") 
     { 
      [pscustomobject]@{Alias1="____";Alias2=$_.Name;Categorie=$_.Group.Category;MatchCase=$false} 
     } 
     else 
     { 
      [pscustomobject]@{Alias1=$_.Name;Alias2="____";Categorie=$_.Group.Category;MatchCase=$false} 
     } 
    } 


} 
+0

类不能被加载“'不能索引到一个空array.'”真正的价值和它的到来空白全是假的值。它正在比较这些文件,但结果会以表格的形式连续出现。你能帮忙吗? –

相关问题