2017-04-20 11 views
-2

初めてpowershellを使用します。 私は2つのcsvファイルを持っています。それぞれの列の数が異なり、エントリ数が異なり、同じ順序ではありません。ここで一般的な列に基づいて、異なる列番号の2つの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 

ですエイリアス列に基づいて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.'に」と、それはすべての偽の値についてのブランク来ロードすることはできませんしてみてください。それはファイルを比較していますが、結果は表形式ではなく順番に来ています。あなたは助けてください。 –

関連する問題