Skip to main content
 首页 » 编程设计

powershell之使用 powershell 删除巨大 (300M) 文本文件的顶行

2025年05月04日183bonelee

本题与Remove Top Line of Text File with Powershell的区别是我的文件很大(超过 300M)。

我现在使用的技术是基于one of the answers对于那个问题,但是对于大文件来说它似乎效率低下。有没有更快(但不太漂亮)的方法来做到这一点?

请您参考如下方法:

尝试使用 streamreader 和 streamwriter。这应该会很快执行。

$reader = [IO.File]::OpenText("C:\Users\Andy\Documents\input.txt") 
$writer = New-Object System.IO.StreamWriter("C:\Users\Andy\Documents\output.txt") 
 
$reader.ReadLine() > $null # Skip first line. 
while ($reader.Peek() -ge 0) { 
    $writer.writeline($reader.ReadLine()) 
} 
 
$reader.Close() 
$writer.Close() 

我通过创建一个 300MB 的文本文件并在上面使用它来进行测试。 output.txt 在 3.5 秒内创建 :-)。

更新 我稍微优化了它,因此它不会在循环的每次迭代中都对表达式求值。现在它在 2.9 秒内完成 :-)

如果你不介意内存膨胀,你也可以这样做。这仍然更快,但占用更多内存,但少于 Get-Content

$reader = [IO.File]::OpenText("C:\Users\Andy\Documents\input.txt") 
$writer = New-Object System.IO.StreamWriter("C:\Users\Andy\Documents\output.txt") 
 
$reader.ReadLine() > $null # Skip first line. 
$writer.write($reader.ReadToEnd()) 
 
$reader.Close() 
$writer.Close()