繁体   English   中英

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

[英]Powershell Help: How can I remove duplicates (using multiple columns simultaneously, not sequentially)?

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

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

需要将其转换为“电子邮件”列对“id”列唯一的文件。 换句话说,可以有重复的地址,但前提是存在不同的 id。

所需的 output C:\Scripts\contacts-trimmed.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:\Scripts\contacts.csv | sort first_name | Sort-Object -Property id,email -Unique | Export-Csv C:\Scripts\contacts-trim.csv -NoTypeInformation

任何帮助或方向将不胜感激

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

$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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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