根据公共列

时间:2017-04-20 07:53:30

标签: powershell powershell-v1.0

第一次使用PowerShell。 我有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

我需要在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 个答案:

答案 0 :(得分: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}
        }
    }


}