gpt4 book ai didi

memory - Powershell 内存使用情况

转载 作者:行者123 更新时间:2023-12-02 06:58:43 24 4
gpt4 key购买 nike

我对 Powershell 有点菜鸟,所以请不要责骂我:-)因此,我需要处理一些相当大的日志文件(600mb),我的脚本本质上是删除那些包含“Message Received”的行,然后标记这些行并将一些标记输出到输出文件。 p>

脚本的逻辑很好(虽然我确信它可以更有效),但问题是,当我向输出文件写入行并且文件随后变大时,powershell 使用的内存量也会增加到内存耗尽点。

谁能建议我如何阻止这种情况发生?我考虑过将日志分解成一个仅 10mb 的临时文件,然后在临时文件上进行处理?

这是我的代码,你们能提供的任何帮助都会很棒:-)

Get-Date | Add-Content -Path d:\scripting\logparser\testoutput.txt


$a = Get-Content D:\scripting\logparser\importsample.txt


foreach($l in $a){
#$l | Select-String -Pattern "Message Received." | Add-Content -Path d:\scripting\logparser\testoutput.txt
if
(($l | Select-String -Pattern "Message Received." -Quiet) -eq "True")

{
#Add-Content -Path d:\scripting\logparser\testoutput.txt -value $l
$var1,$var2,$var3,$var4,$var5,$var6,$var7,$var8,$var9,$var10,$var11,$var12,$var13,$var14,$var15,$var16,$var17,$var18,$var19,$var20 = [regex]::split($l,'\s+')
Add-Content -Path d:\scripting\logparser\testoutput.txt -value $var1" "$var2" "$var3" "$var4" "$var16" "$var18

}
else
{}
}
Get-Date | Add-Content -Path d:\scripting\logparser\testoutput.txt

最佳答案

如果您在管道中执行所有操作,则一次仅需要一个对象(在您的情况下文件中的一行)需要存储在内存中。

Get-Content $inputFile | Where-Object { $_ -match "Message Received" } |
foreach-object -process {
$fields = [regex]::split($_,'\s+') # An array is created
Add-Content -path $outputFile -value [String]::Join(" ", $fields[0,1,2,3,15,17])
}

$fields[0,1,2,3,15,17] 创建 $fields 给定索引的数组。

这也可以在单个管道中使用表达式而不是传递给 Select-Object 的属性名称来完成,但不太清楚。

关于memory - Powershell 内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/614317/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com