¿Cómo dividir archivos de texto grandes con PowerShell?
Cuando se trabaja con archivos de texto grandes, puede ser necesario dividirlos en archivos más pequeños. Este es un requisito común al trabajar con archivos de registro. PowerShell proporciona diferentes comandos y métodos para dividir este tipo de archivos grandes. En este tutorial, exploraremos diferentes métodos para dividir archivos de texto grandes usando PowerShell.
Para dividir un archivo de texto grande en PowerShell, puede utilizar el cmdlet Get-Content combinado con el operador | (tubería) y Set-Content. cmdlet. Al leer el archivo línea por línea y escribir en archivos nuevos después de alcanzar una cierta cantidad de líneas o un límite de tamaño, puede dividir efectivamente un archivo grande en partes más pequeñas y manejables. Aquí hay un script de ejemplo simple que divide un archivo por número de líneas:
$sourceFile = "largefile.txt"
$lineCount = 1000
$counter = 1
Get-Content $sourceFile | ForEach-Object {
$fileName = "splitfile_" + $counter.ToString("000")
Add-Content -Value $_ -Path $fileName
if ((Get-Content -Path $fileName).Count -ge $lineCount) { $counter++ }
}Este script producirá una serie de archivos nuevos, cada uno con hasta 1000 líneas del archivo original.
Dividir archivos de texto grandes con PowerShell
Ahora, veamos cómo dividir archivos de texto grandes con PowerShell. El cmdlet Get-Content es el comando básico para leer datos de un archivo. Le permite especificar un delimitador para dividir el archivo en objetos a medida que se lee, lo cual es útil al dividir archivos según el contenido.
Método 1: dividir por recuento de líneas
Un requisito común es dividir un archivo en partes que contengan un número específico de líneas. Aquí hay un script de PowerShell completo.
$sourceFile = "C:\MyFolder\largefile.txt"
$lineCount = 500 # The number of lines each split file should contain
$splitFilePrefix = "C:\MyFolder\splitfile_"
$counter = 1
Get-Content $sourceFile | ForEach-Object {
$fileName = $splitFilePrefix + $counter.ToString("000")+".txt"
Add-Content -Value $_ -Path $fileName
if ((Get-Content -Path $fileName).Count -ge $lineCount) {
$counter++
}
}
Este script lee el archivo fuente línea por línea y agrega líneas a un nuevo archivo hasta que el recuento de líneas alcanza el límite especificado. Luego incrementa el contador y comienza a escribir en el siguiente archivo.
Tenía un archivo de texto grande y se ve en la captura de pantalla debajo del resultado después de ejecutar el script anterior. Dividió el archivo grande en 4 archivos.
Método 2: dividir por tamaño de archivo
Otro enfoque es dividir el archivo según el tamaño de archivo deseado. El siguiente script de PowerShell le ayudará a dividir un archivo en varias partes con el tamaño máximo que especifique:
$sourceFile = "C:\MyFolder\largefile.txt"
$maxSize = 10MB
$bufferSize = 1024 * 1024 # Read in 1MB chunks
$splitFilePrefix = "C:\MyFolder\splitfile_"
$counter = 1
$fileStream = [System.IO.File]::OpenRead($sourceFile)
$buffer = New-Object Byte[] $bufferSize
$destinationFile = $splitFilePrefix + $counter.ToString("000")+".txt"
while ($fileStream.Position -lt $fileStream.Length) {
$destinationStream = [System.IO.File]::Create($destinationFile)
while ($destinationStream.Length -lt $maxSize -and $fileStream.Position -lt $fileStream.Length) {
$readLength = $fileStream.Read($buffer, 0, $buffer.Length)
$destinationStream.Write($buffer, 0, $readLength)
}
$destinationStream.Dispose()
$counter++
$destinationFile = $splitFilePrefix + $counter.ToString("000")+".txt"
}
$fileStream.Dispose()Este script utiliza objetos de flujo de archivos .NET para leer y escribir datos en fragmentos, asegurando que los archivos divididos no excedan el tamaño máximo especificado.
Método 3: dividir por delimitador personalizado
También puede dividir un archivo según un delimitador específico, como un carácter especial o una cadena. Debería tener un delimitador presentado en el archivo grande. Así es como puedes hacerlo con PowerShell:
$sourceFile = "C:\MyFolder\largefile.txt"
$delimiter = "YOUR_DELIMITER"
$splitFilePrefix = "C:\MyFolder\splitfile_"
$counter = 1
$content = Get-Content -Path $sourceFile -Raw
$chunks = $content -split $delimiter
foreach ($chunk in $chunks) {
$fileName = $splitFilePrefix + $counter.ToString("000")+".txt"
$chunk | Set-Content -Path $fileName
$counter++
}Este script lee todo el contenido del archivo como una sola cadena y luego usa el operador -split para dividir el contenido según el delimitador especificado. Luego, cada fragmento se escribe en un nuevo archivo.
Método 4: uso de módulos externos
Para obtener aún más funciones, puede aprovechar módulos externos como FileSplitter, que está disponible en la Galería de PowerShell. A continuación se muestra un ejemplo de cómo utilizar este módulo:
Install-Module -Name FileSplitter
$sourceFile = "C:\MyFolder\largefile.txt"
$maxSize = 10MB
$splitFilePrefix = "C:\MyFolder\splitfile_"
Split-File -InputFile $sourceFile -Size $maxSize -Destination $splitFilePrefixEste script instala el módulo FileSplitter y luego llama a su cmdlet Split-File para dividir el archivo fuente en partes del tamaño especificado.
Conclusión
Espero que ahora sepas cómo dividir archivos de texto grandes usando PowerShell. He explicado diferentes métodos para dividir archivos por número de líneas, tamaño de archivo o delimitador personalizado. También ejecuté los scripts de PowerShell anteriores y los probé correctamente en mi sistema, y espero que le ayude.
