Лучший способ объединить очень большие текстовые файлы

У меня есть несколько текстовых файлов, которые я хотел бы объединить в один. Размер папки, содержащей все отдельные текстовые файлы, составляет почти 8 ГБ. Я попробовал следующее в powershell:

cat example*.txt | sc allexamples.txt

но как только размер объединенного файла приближается к 800 Мб, ноутбук зависает, и я не могу продолжать дальше. Любой другой способ, которым я могу сделать это?

3 ответа

Это также может быть сделано в PowerShell, вам просто нужно немного разбить его или использовать потоковую запись, которая еще менее трудоемка, чтобы вы не зависали в памяти.

$file = [system.io.file]::OpenWrite("$($pwd.Path)\allexamples.txt")
$writer = New-Object System.IO.StreamWriter($file)

cat example*.txt | ForEach-Object { $writer.WriteLine($_) }

$writer.Close()
$file.Close()

Get-Content -readcount может помочь здесь найти правильный баланс между потреблением памяти и скоростью. Я бы попробовал что-то вроде

Foreach ($File in (Get-Childitem <Folder> -Filter example*.txt)) {
    Get-Content $File -Readcount 1000 | Out-File allexamples.txt -Append
}

Наилучшее значение для readcount зависит от размера файла, доступной памяти и вычислительной мощности.

Причина, по которой он зависает, связана с нехваткой памяти. По сути, ваша команда выполняет передачу данных в буфер и после этого перенаправляется в другой файл. что вам нужно сделать, это написать простой скрипт на Python, чтобы объединить файл для вас. В Python есть функции / классы, которые поддерживают такую ​​операцию.

Другие вопросы по тегам