powershell - 比较两个 CSV,匹配 2 个或更多列上的列,使用 powershell 从两个 csv 导出特定列
问题描述
我有 2 个 CSV
左.csv
Ref_ID,First_Name,Last_Name,DOB
321364060,User1,Micah,11/01/1969
946497594,User2,Acker,05/28/1960
887327716,User3,Aco,06/26/1950
588496260,User4,John,05/23/1960
565465465,User5,Jack,07/08/2020
对.csv
First_Name,Last_Name,DOB,City,Document_Type,Filename
User1,Micah,11/01/1969,Parker,Transcript,T4IJZSYO.pdf
User2,Acker,05/28/1960,,Transcript,R4IKTRYN.pdf
User3,Aco,06/26/1950,,Transcript,R4IKTHMK.pdf
User4,John,05/23/1960,,Letter,R4IKTHSL.pdf
最终结果:
组合.csv
Ref_ID,First_Name,Last_Name,DOB,Document_Type,Filename
321364060,User1,Micah,11/01/1969,Parker,Transcript,T4IJZSYO.pdf
946497594,User2,Acker,05/28/1960,Transcript,R4IKTRYN.pdf
887327716,User3,Aco,06/26/1950,Transcript,R4IKTHMK.pdf
588496260,User4,John,05/23/1960,Letter,R4IKTHSL.pdf
我需要在 First_Name,Last_Name,DOB 上匹配它们,然后从 left.csv 和 Document_Type,Filename 从 right.csv 返回 Ref_ID、first_name、last_name、DOB
使用 Compare-Object: 仅返回来自其中一个 csv 的列,而不是来自两者的列。
使用join-object:这是我很大的希望,但这只能让我匹配一个列,我需要匹配多个列(无法弄清楚如何做多个)
我不知道从这里去哪里,欢迎提出建议。
解决方案
$left = Import-Csv C:\left.csv
$right = Import-Csv C:\right.csv
Compare-Object -ReferenceObject $left -DifferenceObject $right -Property First_Name,Last_Name,DOB -IncludeEqual -ExcludeDifferent |
ForEach-Object {
$iItem = $_
$ileft = $left.Where({$_.First_Name -eq $iItem.First_Name -and $_.Last_Name -eq $iItem.Last_Name -and$_.DOB -eq $iItem.DOB})
$iright = $right.Where({$_.First_Name -eq $iItem.First_Name -and $_.Last_Name -eq $iItem.Last_Name -and$_.DOB -eq $iItem.DOB})
[pscustomobject]@{
Ref_ID=$ileft.Ref_ID
first_name=$ileft.first_name
last_name=$ileft.last_name
DOB=$ileft.DOB
Document_Type=$iright.Document_Type
Filename=$iright.Filename
}
} | Export-Csv C:\Combined.csv -NoTypeInformation
推荐阅读
- powershell - Set-ADUser : 名称引用无效
- c# - 尝试检查另一个脚本中的布尔值是否为真
- google-cloud-dns - 邮件服务器的 Google Cloud DNS 和反向 DNS 问题
- ibm-mobilefirst - 在 Mobile First 中为推送通知配置 TLS 信任
- dialogflow-es - 部署 DialogFlow 而不要求它先执行您的操作?
- ruby - 如何使用适配器防止法拉第更改大写标题
- symfony - Symfony 4 | 通配符:对特定操作具有特定方法的所有请求
- multithreading - 为什么在 QThread(事件循环)之外对 QTimer::start() 的调用没有失败?
- javascript - 如何在部署 expressjs 应用程序时修复 heroku 错误?
- c++ - vcpkg:指定结构成员对齐