繁体   English   中英

PowerShell - 尝试根据列值将 2 个 CSV 文件中的数据合并为一个

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM