首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较值与比较对象

比较值与比较对象
EN

Stack Overflow用户
提问于 2022-11-11 10:35:21
回答 2查看 45关注 0票数 0

从csv文件中获得一组值,列如下所示:

代码语言:javascript
复制
shouston
cgonzalez
bbrown
hlader
kpesavento
jbloom
polson
bcharlow
bcharlow
bkalt

需要找到副本并修改它们。

代码语言:javascript
复制
# Grab CSV file
$inputFile = Import-Csv -Path $filePath
$text = (Get-Culture).TextInfo
$HashSet = [System.Collections.Generic.HashSet[string]]::new([System.StringComparer]::OrdinalIgnoreCase)

foreach ($line in $inputFile) {
    $name = $line.name
    $line.name = $text.ToTitleCase($name)
    $firstName = $line.name.split(" ")[0]
    $lastName = $line.name.split(" ")[1]
    $newEmail = ($firstName[0] + $lastName).toLower()

    if (!$HashSet.Add($newEmail)) {
        $line.email = ($firstName[0] + $lastName + $line.location_id + "@abc.com").toLower()
    }
    else {
        $line.email = ($firstName[0] + $lastName + "@abc.com").toLower()
    }
} 

$inputFile | Export-Csv $fullPath

但是它不像我所期望的那样工作--找到一个重复的值并修改它们。在我的例子中,位置也必须添加到第一个重复的电子邮件中,例如bcharlow1 bcharlow2,而不是bcharlow,bcharlow2。谁能帮我-我需要怎么修改脚本?

EN

回答 2

Stack Overflow用户

发布于 2022-11-11 10:43:35

您可以使用Group-Object查看副本,因此可以执行以下操作:

代码语言:javascript
复制
$val=@(
'**name**',
'shouston',
'cgonzalez',
'bbrown',
'hlader',
'kpesavento',
'jbloom',
'polson',
'bcharlow',
'bcharlow',
'bkalt'
)

$val | Group-Object

将给出给定值被看到多少次的计数。如果您想要看到,让我们说前3,您可以管道它排序和选择

代码语言:javascript
复制
$val | Group-Object -NoElement | Sort-Object Count -Descending | Select-Object -First 3

Count Name                     
----- ----                     
    2 bcharlow                 
    1 **name**                 
    1 shouston 
票数 2
EN

Stack Overflow用户

发布于 2022-11-11 11:46:30

可能最简单(也是最快)的方法是使用HashSet

代码语言:javascript
复制
$InputFile = ConvertFrom-Csv @'
id, location_id, name,                 title,                              email, department
 1,           1, "Susan houston",      DS,                                      ,
 2,           1, "Christina Gonzalez", D,                                       ,
 3,           2, "Brenda brown",       "Director, Second Career Services",      ,
 4,           3, "Howard Lader",       "Manager, Senior Counseling",            ,
 5,           4, "Kimberly Pesavento", "Commercial director",                   ,
 6,           5, "Joe Bloom",          Finance,                                 ,          7
 8,           6, "Bart charlow",       Director,                                ,
 9,           7, "Bart Charlow",       Director,                                ,
'@

$Emails = [System.Collections.Generic.HashSet[string]]::new([System.StringComparer]::OrdinalIgnoreCase)

foreach ($line in $inputFile) {
    $name = $line.name
    $line.name = (Get-Culture).TextInfo.ToTitleCase($name)
    $firstName = $line.name.split(" ")[0]
    $lastName = $line.name.split(" ")[1]
    $newEmail = ($firstName[0] + $lastName).toLower()

    if (!$Emails.Add($newEmail)) {
        $line.email = ($firstName[0] + $lastName + $line.location_id + "@abc.com").toLower()
    }
    else {
        $line.email = ($firstName[0] + $lastName + "@abc.com").toLower()
    }
}

$InputFile |ConvertTo-Csv
代码语言:javascript
复制
"id","location_id","name","title","email","department"
"1","1","Susan Houston","DS","shouston@abc.com",""
"2","1","Christina Gonzalez","D","cgonzalez@abc.com",""
"3","2","Brenda Brown","Director, Second Career Services","bbrown@abc.com",""
"4","3","Howard Lader","Manager, Senior Counseling","hlader@abc.com",""
"5","4","Kimberly Pesavento","Commercial director","kpesavento@abc.com",""
"6","5","Joe Bloom","Finance","jbloom@abc.com","7"
"8","6","Bart Charlow","Director","bcharlow@abc.com",""
"9","7","Bart Charlow","Director","bcharlow7@abc.com",
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74401226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档