我从网站上删除了两个文件,以便列出我所在城市的公司。 第一个列表:姓名,城市,电话号码,电子邮件 第二个列表:姓名,城市,电话号码
如果我将它们合并,我会有重复的行,例如,我将有以下内容:
> "Firm1";"Los Angeles";"000000";"info@firm1.lol"
> "Firm1";"Los Angeles";"000000";""
> "Firm2";"Los Angeles";"111111";""
> "Firm3";"Los Angeles";"000000";"contact@firm3.lol"
> "Firm3";"Los Angeles";"000000";""
> ...
有没有办法合并这两个文件并保留最大信息:
> "Firm1";"Los Angeles";"000000";"info@firm1.lol"
> "Firm2";"Los Angeles";"111111";""
> "Firm3";"Los Angeles";"000000";"contact@firm3.lol"
> ...
答案 0 :(得分:0)
根据这个事实,你有一个名为'firm.csv'的文件
"Firm1";"Los Angeles";"000000";"info@firm1.lol"
"Firm1";"Los Angeles";"000000";""
"Firm2";"Los Angeles";"111111";""
"Firm3";"Los Angeles";"000000";"contact@firm3.lol"
"Firm3";"Los Angeles";"000000";""
您可以使用以下方式加载它:
$firms = import-csv C:\temp\firm.csv -Header 'Firm','Town','Tel','Mail' -Delimiter ';'
然后
$firms | Sort-Object -Unique -Property 'Firm'
根据Joey的评论,我改进了解决方案:
$firms | Group-Object -Property 'firm' | % {$_.group | Sort-Object -Property mail -Descending | Select-Object -first 1}
答案 1 :(得分:0)
必须有更好的方法,但这是一种很好的方法来做到这一点。
$firms = import-csv C:\firm.csv -Header 'Firm','Town','Tel','Mail' -Delimiter ';'
$Result = @()
ForEach($i in $firms){
$found = 0;
ForEach($m in $Result){
if($m.Firm -eq $i.Firm){
$found = 1
if( $i.Mail.length -ne 0 )
{
$m.Mail = $i.Mail
}
break;
}
}
if($found -eq 0){
$Result += [pscustomobject] @{Firm=$i.Firm; Town=$i.Town; Tel=$i.Tel; Mail=$i.Mail}
}
}
$Result | export-csv C:\out.csv
答案 2 :(得分:0)
编辑:刚刚意识到这两个文件不包含相同的标题。这是一个更新。
$main = Import-Csv firm1.csv -Header 'Firm','Town','Tel','Mail' -Delimiter ";"
$alt = Import-Csv firm2.csv -Header 'Firm','Town','Tel' -Delimiter ";"
foreach ($f in $alt)
{
$found = $false
foreach($g in $main)
{
if ($g.Firm -eq $f.Firm -and $g.city -eq $f.city)
{
$found = $true
if ($g.Tel -eq "")
{
$g.Tel = $f.Tel
}
}
}
if ($found -eq $false)
{
$main += $f
}
}
# Everything is merged into the $main array
$main