我正在尝试编写一个工作流程,该工作流程将针对每个附加行评估CSV的每一行,以估计哪些行可能是重复的。然而,我有23,000多行,所以Powershell需要5天才能执行这个脚本。
我把它变成了一个工作流程,所以我可以尝试运行一个并行的foreach循环,并且必须修改我为工作流程限制分配变量等的方式。我终于让工作流程工作而不会抛出错误,但它实际上并没有导出CSV文件。
我可以在任务管理器中看到powershell.exe
使用20%的CPU,我可以进入调试器并看到它正在通过这些行。只是没有CSV。
有什么想法吗?
workflow Leads-Workflow
{
$leads = Import-CSV C:\Temp\leads.csv
$Count = $null
$time = Get-Date
foreach -Parallel ($lead in $leads)
{
for($i=0;$i -le $leads.count;$i++)
{
$Poss = 0
$Dupes = 0
if($lead.FullName -ne $null -AND $leads[$i].FullName -ne $null -AND $lead.FullName -ne $leads[$i].FullName)
{
for($l=0;$l -lt $lead.FullName.Length;$l++)
{
if($lead.FullName[$l] -eq $leads[$i].FullName[$l])
{
$Poss += $l
$l += $lead.FullName.Length
}
}
}
elseif($lead.FullName -ne $null -AND $leads[$i].FullName -ne $null -AND $lead.FullName -eq $leads[$i].FullName)
{
$Poss += ($lead.FullName.Length*5)
}
if($lead.Account -ne $null -AND $leads[$i].Account -ne $null -AND $lead.Account -ne $leads[$i].Account)
{
for($l=0;$l -lt $lead.Account.Length;$l++)
{
if($lead.Account[$l] -eq $leads[$i].Account[$l])
{
$Poss += $l
$l += $lead.Account.Length
}
}
}
elseif($lead.Account -ne $null -AND $leads[$i].Account -ne $null -AND $lead.Account -eq $leads[$i].Account)
{
$Poss += ($lead.Account.Length*5)
}
if($lead.Street -ne $null -AND $leads[$i].Street -ne $null -AND $lead.Street -ne $leads[$i].Street)
{
for($l=0;$l -lt $lead.Street.Length;$l++)
{
if($lead.Street[$l] -eq $leads[$i].Street[$l])
{
$Poss += $l
$l += $lead.Street.Length
}
}
}
elseif($lead.Street -ne $null -AND $leads[$i].Street -ne $null -AND $lead.Street -eq $leads[$i].Street)
{
$Poss += ($lead.Street.Length*5)
}
if($lead.City -ne $null -AND $leads[$i].City -ne $null -AND $lead.City -ne $leads[$i].City)
{
if($lead.City -eq $leads[$i].City)
{
$Poss += 5
}
}
if($lead.Email -ne $null -AND $leads[$i].Email -ne $null -AND $lead.Email -ne $leads[$i].Email)
{
for($l=0;$l -lt $lead.Email.Length;$l++)
{
if($lead.Email[$l] -eq $leads[$i].Email[$l])
{
$Poss += $l
$l += $lead.Email.Length
}
}
}
elseif($lead.Email -ne $null -AND $leads[$i].Email -ne $null -AND $lead.Email[$l] -eq $leads[$i].Email)
{
$Poss += ($lead.Email.Length*5)
}
if($lead.Phone -ne $null -AND $leads[$i].Phone -ne $null -AND $lead.Phone -ne $leads[$i].Phone)
{
for($l=0;$l -lt $lead.Phone.Length;$l++)
{
if($lead.Phone[$l] -eq $leads[$i].Phone[$l])
{
$Poss += $l
$l += $lead.Phone.Length
}
}
}
elseif($lead.Phone -ne $null -AND $leads[$i].Phone -ne $null -AND $lead.Phone -eq $leads[$i].Phone)
{
$Poss += ($lead.Phone.Length*5)
}
if($lead.Website -ne $null -AND $leads[$i].Website -ne $null -AND $lead.Website -ne $leads[$i].Website)
{
for($l=0;$l -lt $lead.Website.Length;$l++)
{
if($lead.Website[$l] -eq $leads[$i].Website[$l])
{
$Poss += $l
$l += $lead.Website.Length
}
}
}
elseif($lead.Website -ne $null -AND $leads[$i].Website -ne $null -AND $lead.Website -eq $leads[$i].Website)
{
$Poss += ($lead.Website.Length*5)
}
if($Poss -ge 100 -AND $lead.LeadID -ne $leads[$i].LeadID)
{
$Dupes += $leads[$i].LeadID + "; "
}
}
$lead = $lead | Add-Member @{Poss=$Poss;Dupes=$Dupes} -PassThru
Export-CSV C:\temp\Deduped\leads.csv -InputObject $lead -Append -Force
$Workflow:Count += 1
Write-Progress -Activity "Deduping Leads . . ." -status "Scanned $Count of $($leads.Count)" -percentComplete (($Count / $leads.Count)*100)
}
}
Leads-Workflow
答案 0 :(得分:0)
您希望Export-Csv
如何处理并发写入尝试?
要查找或删除CSV中的重复项,只需使用Group-Object
。
查找重复项:
$header = 'Account', 'FullName', 'City', 'Street', 'Email', 'Phone', 'Website'
Import-Csv 'C:\Temp\leads.csv' |
Group-Object $header |
? { $_.Group.Count -gt 1 }
删除重复项:
$header = 'Account', 'FullName', 'City', 'Street', 'Email', 'Phone', 'Website'
Import-Csv 'C:\Temp\leads.csv' |
Group-Object $header |
? { $_.Group.Count -eq 1 } |
select -Expand Group |
Export-Csv 'C:\Temp\Deduped\leads.csv' -NoType