powershell - 我怎样才能更正 .csv 文件的协调以删除重复/空值

标签 powershell csv reconciliation

我一直在使用来自 this answer 的代码从 MS Teams 检查类(class)花名册的添加/更改:

$set = [System.Collections.Generic.HashSet[string]]::new(
    [string[]] (Import-CSV -Path stundent.csv).UserPrincipalName,
    [System.StringComparer]::InvariantCultureIgnoreCase
)
Import-Csv ad.csv | Where-Object { $set.Add($_.UserPrincipalName) } |
    Export-Csv path\to\output.csv -NoTypeInformation

理想情况下,我希望能够检查与新文件相比是否有删除,交换导入文件位置,并检查是否有添加。如果我的文件看起来像 Source1 和 Source2(如下),删除检查将返回 Export1,添加检查将返回 Export2。 由于多个类(class)会有多个学生实例,我想在过滤器查询中包含 TeamDesc 以确保只返回该类(class)学生的特定实例。

Source1.csv

<表类="s-表"> <头> 团队描述 用户主体名称 名称 <正文> 团队 1 student1@domain.com 约翰·史密斯 团队 1 student2@domain.com 南希画画 团队 2 student3@domain.com 哈维登特 团队 3 student1@domain.com 约翰·史密斯

Source2.csv

<表类="s-表"> <头> 团队描述 用户主体名称 名称 <正文> 团队 1 student2@domain.com 南希画画 团队 2 student3@domain.com 哈维登特 团队 2 student4@domain.com 蒂姆·塔姆斯 团队 3 student1@domain.com 约翰·史密斯

Export1.csv

<表类="s-表"> <头> 团队描述 用户主体名称 名称 <正文> 团队 1 student1@domain.com 约翰·史密斯

导出2.csv

<表类="s-表"> <头> 团队描述 用户主体名称 名称 <正文> 团队 2 student4@domain.com 蒂姆·塔姆斯

最佳答案

尝试以下,它使用 Compare-Object通过两个列值比较 CSV 文件,只需将感兴趣的属性(列)名称传递给 -Property;使用 intrinsic .Where() method 将结果输出分成两个集合,基于输入端不同的属性组合是唯一的。 :

$removed, $added = (
  Compare-Object (Import-Csv Source1.csv) (Import-Csv Source2.csv) -PassThru `
                 -Property TeamDesc, UserPrincipalName
).Where({ $_.SideIndicator -eq '=>' }, 'Split')

$removed | 
  Select-Object -ExcludeProperty SideIndicator |
  Export-Csv -NoTypeInformation Export1.csv

$added |
  Select-Object -ExcludeProperty SideIndicator |
  Export-Csv -NoTypeInformation Export2.csv

关于powershell - 我怎样才能更正 .csv 文件的协调以删除重复/空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74452725/

相关文章:

powershell - 如何使用powershell对数组进行一一比较

shell - 比较文件并更新匹配字符串 awk/sed/diff/grep/csv

Python将整列添加到csv文件中,而不读取文件内容

java - 如何使用 OpenCSV 跳过 csv 文件中嵌入的 "newlines"

reactjs - 使用 useRef(uuid()) 的目的是什么?

powershell - 每次执行脚本时重新加载 PowerShell 模块

windows - 如何从 powershell 控制台查看日志文件? (即相当于 'less' 的 powershell)

powershell - Windows 10 ver 1709中缺少Powershell