Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Разбить файл по N строк (http://forum.oszone.net/showthread.php?t=352880)

Asdshka 22-01-2023 19:33 3001555

Разбить файл по N строк
 
Здравствуйте, как можно разбить файл по N строк?
Допустим у меня файл, где 100млн строк, надо разбить его на файлы по 10млн строк, последний файл может быть меньше (если кол-во не позволяет)

Находил BAT и PowerShell, но они слишком медленно работали...

dmitryst 22-01-2023 19:36 3001556

Цитата:

Цитата Asdshka
100млн строк »

Цитата:

Цитата Asdshka
они слишком медленно работали.. »

На таком количестве строк будет работать медленно всё, разве что, кроме ассеблера :biggrin:
На крайняк, можно попросить фрилансеров написать улититу на С++

PowerShell:
Код:

gc file.txt -readcount 1000 | ForEach-Object { $i=0 } { $_ | Out-File "new_file${i}.txt"; $i++}
gc - сокращенный вариант команды GetContent (чтение файла);

file.txt - исходный многострочный файл, который нужно разделить на несколько с меньшим количеством строк;

1000 - число строк в каждом файле на выходе;

new_file${i}.txt - маска для имени файлов на выходе, вместо ${i} будет инкремент числа от 0 и далее.

YuS_2 22-01-2023 23:04 3001562

Цитата:

Цитата Asdshka
у меня файл, где 100млн строк, надо разбить его на файлы по 10млн строк »

powershell
Код:

measure-command{

$fld = '.\test'
$fin = 'test.txt'
$max = 10000000
$reader = [io.streamreader]::new($fin)
$i,$n = 0,1

if (!(test-path $fld -patht 'Container')){$null = md $fld}
while ($reader.peek() -ne -1) {
        $fout = $fld + '\' + $n + '.txt'
        $writer = [io.streamwriter]::new($fout)
        while ($i -lt $max){
                $writer.writeline($reader.readline())
                $i++
                if ($reader.peek() -eq -1){$i = $max}
        }
        $i = 0
        $n++
        $writer.dispose();$writer.close()
}
$reader.dispose();$reader.close()

}

файл размером 1.5Гб, 100000000 строк
результат скорости:
Цитата:

TotalSeconds : 121,5333788

dmitryst 23-01-2023 08:59 3001574

YuS_2, да, таки ваш шворц быстрее :yes:

DJ Mogarych 23-01-2023 13:09 3001594

Можно так попробовать (git bash)
Код:

.\bash.exe -c "split 'd:\temp\contig.txt' 'D:\temp\part' -l 10000000 -d -a 3"


Время: 08:00.

Время: 08:00.
© OSzone.net 2001-