Я пытаюсь удалить некоторые письма из списка 'data.txt', где их sh фигурирует в другом списке 'MD5.txt'
ниже - скрипт, который я создал (он работает нормально, но только для небольших файлов)
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 слишком велик (более 1 ГБ), поэтому даже при 16 ГБ ОЗУ сценарий не может сравнить каждую строку (почта) с миллионами строк MD5. (это составляет 30 секунд для каждой строки)
Любые идеи, как я могу сделать эту задачу быстрее? спасибо