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