Многие из этих ответов были слишком медленными для моих исходных файлов. Мои исходные файлы были файлами SQL размером от 10 МБ до 800 МБ, которые нужно было разбить на файлы с примерно равным количеством строк.
Я нашел некоторые из предыдущих ответов, которые используют Add-Content, довольно медленно. Многочасовое ожидание окончания раскола не было редкостью.
Я не пробовал Ответ Тифлозавра , но он рассчитывает делать разбиения только по размеру файла, а не по количеству строк.
Следующее подходит для моих целей.
$sw = new-object System.Diagnostics.Stopwatch
$sw.Start()
Write-Host "Reading source file..."
$lines = [System.IO.File]::ReadAllLines("C:\Temp\SplitTest\source.sql")
$totalLines = $lines.Length
Write-Host "Total Lines :" $totalLines
$skip = 0
$count = 100000; # Number of lines per file
# File counter, with sort friendly name
$fileNumber = 1
$fileNumberString = $filenumber.ToString("000")
while ($skip -le $totalLines) {
$upper = $skip + $count - 1
if ($upper -gt ($lines.Length - 1)) {
$upper = $lines.Length - 1
}
# Write the lines
[System.IO.File]::WriteAllLines("C:\Temp\SplitTest\result$fileNumberString.txt",$lines[($skip..$upper)])
# Increment counters
$skip += $count
$fileNumber++
$fileNumberString = $filenumber.ToString("000")
}
$sw.Stop()
Write-Host "Split complete in " $sw.Elapsed.TotalSeconds "seconds"
Для файла 54 МБ я получаю вывод ...
Reading source file...
Total Lines : 910030
Split complete in 1.7056578 seconds
Я надеюсь, что другие, ищущие простой, основанный на строках скрипт расщепления, который соответствует моим требованиям, найдут это полезным.