我整理了一个小脚本来改变大文本文件(通常包含500K +行)。它工作得很好,完成操作所需的时间似乎是可以接受的......但后来我尝试添加进度条并在相对较小的文本文件(30K行)上进行测试。没有进度条和执行时间的执行时间分别约为14秒和289秒。
此脚本用于删除11到14长度之间的数字字符以外的所有内容,然后从剩余的字符中删除重复的行。
$lines = Get-Content *.txt
$totalL = $lines.count
$i = 0
$lines |
Where-Object {$_ -Match '\b([0-9]{11,14})\b'} |
ForEach-Object {
Write-Progress -PercentComplete (
$i*100/$totalL) -Activity "Lines completed: $i/$totalL" -Status 'Working'
$_ -replace '.*(\b([0-9]{11,14})\b).*', '$1'
$i++ } |
sort | get-unique |
Set-Content Final_Unique.txt
我是PowerShell的全新人物。我需要帮助来更好地优化这个noob脚本,并在保持进度条的同时将执行时间保持在最低限度。