第一次使用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
答案 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}
}
}
}