簡體   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