Saltar al contenido

PowerShell: ¿cómo contar el número de filas en un archivo csv?

Solución:

Get-Content y Measure-Object están bien para archivos pequeños, pero ambos son muy ineficientes con la memoria. Tuve problemas reales con archivos grandes.

Al contar filas en un archivo de 1GB usando cualquier método, Powershell engulló toda la memoria disponible en el servidor (8GB), luego comenzó a paginar en el disco. Lo dejé más de una hora, pero todavía estaba pagándose en el disco, así que lo maté.

El mejor método que encontré para archivos grandes es usar IO.StreamReader para cargar el archivo desde el disco y contar cada fila usando una variable. Esto mantiene el uso de la memoria a unos 25 MB muy razonables y es mucho, mucho más rápido, ya que toma alrededor de 30 segundos para contar filas en un archivo de 1 GB o un par de minutos para un archivo de 6 GB. Nunca consume cantidades excesivas de RAM, sin importar el tamaño de su archivo:

[int]$LinesInFile = 0
$reader = New-Object IO.StreamReader 'c:filename.csv'
 while($reader.ReadLine() -ne $null){ $LinesInFile++ }

El fragmento de código anterior se puede insertar donde quiera que use get-content o meter-object, simplemente consulte la variable $ LinesInFile para obtener el recuento de filas del archivo.

Típelo al Measure-Object cmdlet

Import-Csv C:Directoryfile.csv | Measure-Object

Generalmente (csv o no)

@(Get-Content c:file.csv).Length

Si el archivo tiene solo una línea, fallará. (Necesita el prefijo @ … de lo contrario, si el archivo tiene una línea, solo contará el número de caracteres en esa línea.

Get-Content c:file.csv | Measure-Object -line

Pero ambos fallarán si algún registro ocupa más de una fila. Entonces es mejor importar csv y medir:

Import-Csv c:file.csv | Measure-Object | Select-Object -expand count
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *