Лучший способ объединить очень большие текстовые файлы
У меня есть несколько текстовых файлов, которые я хотел бы объединить в один. Размер папки, содержащей все отдельные текстовые файлы, составляет почти 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 есть функции / классы, которые поддерживают такую операцию.