在 Powershell 中创建和比较哈希表



我正在寻找一个函数来比较两个格式化的 CSV:

答.csv

x1|y1
x2|y2
x3|y3

乙.csv

x2
x3
x4

此 csv 中的 x 值将与 a 中的 x 值完全相同.csv

我想实现的是当 for 循环运行时,输出是 b.csv 的键与 a .csv 的键 ve 匹配的地方,它将输出 b 键及其匹配的值:

x2|y2 
x3|y3
x4| "no match"

我的 CSV 的格式设置方式可能是也可能不是标题(很可能不是(,但值和键列将始终保持不变。

我对PowerShell非常陌生,语法和用法与其他语言相似,但似乎总有一种更简单的方法来运行我认为在PowerShell中的简单操作。

任何帮助将不胜感激。

您需要确定CSV文件中是否会有标头。 有一些方法可以处理"有时",但这是一个不同的问题,应该在源头上修复。[咧嘴一笑]

这会根据第一个文件中的所有项目检查第二个文件中的每个项目。如果找到匹配项,则使用第一个文件中的值。 如果没有匹配项,则使用第二个文件中的值,第 2 列填充"未找到"文本消息。

# fake reading in a CSV file
#    in real life, use Import-CSV
$OneInStuff = @'
x1, y1
x2, y2
x3, y3
'@ | ConvertFrom-Csv -Header 'OneX', 'OneY'
# fake reading in a 2nd CSV file
$TwoInStuff = @'
x2
x3
x4
'@ | ConvertFrom-Csv -Header 'Twox'
$NotInTwo = '_Not In Two_'
$ThreeStuff = foreach ($TIS_Item in $TwoInStuff)
{
$X_InBoth = $OneInStuff -match $TIS_Item.Twox
if ($X_InBoth)
{
[PSCustomObject]@{
ThreeX = $X_InBoth.OneX
ThreeY = $X_InBoth.OneY
}
}
else
{
[PSCustomObject]@{
ThreeX = $TIS_Item.Twox
ThreeY = $NotInTwo
}
}
}
$ThreeStuff

输出。。。

ThreeX ThreeY      
------ ------      
x2     y2          
x3     y3          
x4     _Not In Two_

最新更新