我有一个电子邮件地址列表,其中很多都有相同的域名。
所以说我们有一个这样的列表:
User1@domain.com
User2@domain.com
User3@domain.com
User1@domain2.com
User2@domain2.com
我想要的是删除我不需要的物品:
仅离开:
我已经设法创建一个PS脚本,您可以在其中删除CSV文件中包含我们不需要的电子邮件地址的行,但问题是该脚本正在删除包含该字符串的每个地址:
Get-Content 'C:\list.csv' | Where-Object {$_ -notmatch 'domain'}| Set-Content C:\out.csv
因此,如果我使用此脚本,它将删除包含“domain”的每一行,但我想保存包含它的第一行。
答案 0 :(得分:3)
尝试:
#Seems this is a txtfile and not csv, so we'll just read it as text
Get-Content 'C:\list.csv' |
#Group by domain
Group-Object { $_ -replace '^.*@' } |
#Get first address per domain
ForEach-Object { $_.Group[0] } |
#Save to file
Set-Content C:\out.csv
输出:
User1@domain.com
User1@domain2.com
如果您只需要域名,可以使用:
#Read file
Get-Content 'C:\list.csv' |
#Group by domain
Group-Object { $_ -replace '^.*@' } |
#List group names (domain names)
Select-Object -ExpandProperty Name |
#Save to file
Set-Content C:\out.csv
输出:
domain.com
domain2.com
答案 1 :(得分:0)
如果您只想为每个唯一的电子邮件地址添加一个匹配项,则可以使用select-object -unique:
Get-Content 'C:\list.csv' | Select-Object -Unique | Set-Content C:\out.csv
虽然您希望每个电子邮件域都有一个唯一条目。它是哪个条目有关系吗?以下PowerShell代码将获得每个域的第一个匹配项(它假定您的CSV文件的标题为" emailaddress"用于电子邮件地址字段:
Import-CSV 'list.csv' | ForEach-Object {
$_ | Add-Member –MemberType NoteProperty –Name Domain -Value ($_.emailaddress -split '@')[1]
Write-Output $_
} | Group-Object Domain | ForEach-Object { $_ | Select -ExpandProperty Group | Select emailaddress -First 1 }
答案 2 :(得分:0)
您可以使用Dictionary
仅存储唯一的域。
下面的代码将遍历A列中的所有电子邮件地址(从单元格" A2&#34开始; - 您可以修改以满足您的需要),然后使用Split
功能进行拆分电子邮件地址和域名(进入EmailArr
数组)。
然后,确认代表域名的EmailArr(1)
是唯一的,确保它不在Dictionary
中,您可以通过以下代码行实现此目的:{{1 } - >就是这样,你有一个只存储唯一域名的`词典。
最后,我添加了一个循环来显示If Not Dict.exists(EmailArr(1)) Then
中的唯一域名(您可以将它们放在数组或范围中)。
<强>代码强>
MsgBox