我在搜索40GB日志文件时遇到Powershell性能问题。
我需要检查此40gb文件中是否包含1000个电子邮件地址。这将需要180个小时:D有什么想法吗?
$logFolder = "H:\log.txt"
$adressen= Get-Content H:\Adressen.txt
$ergebnis = @()
foreach ($adr in $adressen){
$suche = Select-String -Path $logFolder -Pattern "\[\(\'from\'\,.*$adr.*\'\)\]" -List
$aktiv= $false
$adr
if ($suche){
$aktiv = $true
}
if ($aktiv -eq $true){
$ergebnis+=$adr + ";Ja"
}
else{
$ergebnis+=$adr + ";Nein"
}
}
$ergebnis |Out-File H:\output.txt
最佳答案
不要读取文件1000次。
用所有1000个地址构建一个正则表达式行(这将是一个很大的行,但是,比40TB小得多)。喜欢:
$Pattern = "\[\(\'from\'\,.*$( $adressen -join '|' ).*\'\)\]"
然后执行您的Select-String,并保存结果以在其中按地址搜索。希望结果将比40Gb小得多,并且应该更快。