![](/img/trans.png)
[英]Combine data from 2 CSV files into 1 new CSV using Powershell
[英]PowerShell - Trying to combine data from 2 CSV files into one based on column value
长时间的听众第一次来电。
通常我很擅长寻找和挖掘并得到我需要的东西,然后修改它以适应它。 这似乎比我之前设法完成的要复杂一些。 我在 PowerShell 自学成才,主要是出于好奇,想看看我能做什么。
我正在尝试从 2 个 CSV 的数据创建报告,并且 2 个 CSV 中的“大部分”数据是相同的。 我想将其中一个 CSV 添加到另一个 CSV 中只有 1 列数据。 I live regularly in the world of excel and I can do this with a formula in a matter of seconds [=VLOOKUP(H8,C:C,2,FALSE)] but accomplishing the same goal in PowerShell seems to be eluding me.
正如我所提到的,我倾向于尝试寻找其他做过类似事情的人并对其进行修改。 我在这里找到的最好听的一个( 使用 Powershell 将 2 个 CSV 文件中的数据合并到 1 个新 CSV 中),我仍在尝试使用该站点上的代码。 有时我发现一些东西,我尝试坚持太久,因为可能有另一个我不熟悉的命令更适合我应该查看的内容,并且可能只需要指向那个方向的指针。
但这是我正在尝试做的事情的视觉表示。 并且文件 2 中的每个 email 地址都存在于文件 1 中。
使用Import-Csv
将两个 CSV 输入文件解析为[pscustomobject]
实例的 arrays 以进行 OOP 处理。
对于文件 2,构建一个哈希表,将Email
列值映射到它们的License
值。
然后使用Select-Object
的计算属性到 append 属性到从文件 1 解析的对象,使用哈希表到 map 每个Email
属性到文件 2 中的License
值; 如果给定的Email
属性值没有哈希表条目,则返回$null
,在导出到 CSV (使用Export-Csv
)的上下文中相当于一个空字段(列值)。
# Import file 2 and create a hashtable that maps each Email
# column value to the License column value.
$ht = @{}
Import-Csv File2 | ForEach-Object { $ht[$_.Email] = $_.License }
# Import file 1 and append a License column that contains
# the license value from file 2 if the Email column value matches.
Import-Csv File1 |
Select-Object *, @{ Name='License'; Expression={ $ht[$_.Email] } }
# | Export-Csv ... # complete as needed
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.