我正在尝试从列表“ data.txt”中删除一些邮件,其中其哈希值在另一个列表“ MD5.txt”中
bellow是我制作的脚本(它可以正常工作,但仅适用于小文件)
function Get-MD5{
Param ([String]$mail)
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$utf8 = New-Object -TypeName System.Text.UTF8Encoding
$hash = [System.BitConverter]::ToString($md5.ComputeHash($utf8.GetBytes($mail)))
$hash = $hash.Replace('-','')
return [String]$hash
}
$data = gc $dataPath
$unsub = gc $MD5Path #ReadCount 5000 -Raw not better
foreach($d in $data){
$t = Get-MD5 "$d"
if($unsub -like "*$t*"){
$data | Where-Object { $_ -notmatch "$d" } | Out-File -FilePath "$dataPath"
}
}
我所遇到的问题是MD5文件太大(大于1Gb),因此即使具有16 Gb RAM,该脚本也无法将每行(邮件)与数百万个MD5行进行比较。 (每行30秒)
任何想法,我如何能更快地完成此任务?谢谢
我可以提供一些技巧,但没有实际的文件和测试,现在可以确定会有多少改进。