powershell - 在 Powershell 中创建和比较哈希表
问题描述
我正在寻找一个函数来比较两个格式如下的 CSV:
一个.csv
x1|y1
x2|y2
x3|y3
b.csv
x2
x3
x4
此 csv 中的 x 值将与 a.csv 中的 x 值完全相同
我想要实现的是当 for 循环运行时,输出是 b.csv 中的键与 a.csv 的键 ve 匹配的任何位置,它将输出 b 键及其匹配的值:
x2|y2
x3|y3
x4| "no match"
我的 CSV 格式可能是也可能不是标题(很可能不是),但值和键列将始终保持不变。
我对 PowerShell 非常陌生,语法和用法与其他语言相似,但似乎总有一种更简单的方法可以在 PowerShell 中运行我认为的简单操作。
任何帮助将不胜感激。
解决方案
您需要确定 CSV 文件中是否包含标题。有一些方法可以处理“有时”,但这是一个不同的问题,应该从源头上解决。[咧嘴笑]
这将检查第二个文件中的每个项目与第一个文件中的所有项目。如果找到匹配项,则使用第一个文件中的值。如果不匹配,则使用第二个文件中的值,第二列填充“未找到”文本消息。
# 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_
推荐阅读
- javascript - popup not working via javascript cookies - updated code
- java - How to pass Rest post call inputs
- java - 即使文件在工作目录中,也无法从 java 中读取文件
- ios - 尝试使用 SnapKit 在自定义 UITableViewCell 中布局 UILabel 时收到警告
- c# - ElasticSearch sorting term aggregation buckets
- git - 使用 Git 修正合并冲突
- r - 具有全局分配的高效 vapply
- docker - 查找给定标签的图像标签变体
- haskell - OpenGL world coordinates from mouse coordinates
- python - PyQT/Pyside Opengl widget overlay