Powershell帮助:如何删除重复项(同时使用多个列,而不是顺序使用)?



我根据其他一些堆栈溢出文章尝试了几种不同的变体,但我将分享我所拥有的示例和示例输出,然后是一些拼凑在一起的代码,希望从社区获得一些指导:

C: Scripts contacts.csv:

id,first_name,last_name,email
1,john,smith,jsmith@notreal.com
1,jane,smith,jsmith@notreal.com
2,jane,smith,jsmith@notreal.com
2,john,smith,jsmith@notreal.com
3,sam,jones,sjones@notreal.com
3,sandy,jones,sandy@notreal.com

需要将其转换为一个文件,其中列"email"对于列"id"是唯一的。换句话说,可以有重复的地址,但前提是有不同的id。

期望输出C:Scriptscontacts-trim .csv:

id,first_name,last_name,email
1,john,smith,jsmith@notreal.com
2,john,smith,jsmith@notreal.com
3,sam,jones,sjones@notreal.com
3,sandy,jones,sandy@notreal.com

我已经尝试了一些不同的变化:

Import-Csv C:Scriptscontacts.csv | sort first_name | Sort-Object -Property id,email -Unique | Export-Csv C:Scriptscontacts-trim.csv -NoTypeInformation

任何帮助或指导将是最感激的

您将需要使用Group-Objectcmdlet来将具有相似值的记录组合在一起:

$records = @'
id,first_name,last_name,email
1,john,smith,jsmith@notreal.com
1,jane,smith,jsmith@notreal.com
2,jane,smith,jsmith@notreal.com
2,john,smith,jsmith@notreal.com
3,sam,jones,sjones@notreal.com
3,sandy,jones,sandy@notreal.com
'@ |ConvertFrom-Csv
# group records based on id and email column
$records |Group-Object id,email |ForEach-Object {
# grab only the first record from each group
$_.Group |Select-Object -First 1
} |Export-Csv .no_duplicates.csv -NoTypeInformation

相关内容

  • 没有找到相关文章

最新更新