Tengo la necesidad de analizar a través de un archivo grande delimitado por tuberías para contar el número de registros cuya 5ª columna cumple y no cumple mis criterios.Necesito ayuda para mejorar el rendimiento de la secuencia de comandos de análisis de texto delimitado de PowerShell
PS C:\temp> gc .\items.txt -readcount 1000 | `
? { $_ -notlike "HEAD" } | `
% { foreach ($s in $_) { $s.split("|")[4] } } | `
group -property {$_ -ge 256} -noelement | `
ft –autosize
Este comando hace lo que yo quiero, volviendo salida como esta:
Count Name ----- ---- 1129339 True 2013703 False
Sin embargo, para un archivo de prueba de 500 MB, este comando se lleva alrededor de 5,5 minutos para correr según lo medido por la Medida-Command. Un archivo típico tiene más de 2 GB, donde esperar más de 20 minutos es indeseablemente largo.
¿Ve alguna manera de mejorar el rendimiento de este comando?
Por ejemplo, ¿hay alguna manera de determinar un valor óptimo para ReadCount Get-Content? Sin él, toma 8,8 minutos completar el mismo archivo.
¿Has probado StreamReader? Creo que Get-Content carga todo el archivo en la memoria antes de que haga nada con él. – Gisli
¿Quiere decir al importar System.IO? – neontapir
Sí, use .net framework si puede. Solía leer grandes archivos de registro que SQL Server genera con buenos resultados. No conozco otra forma en PowerShell para leer archivos de gran tamaño de manera eficiente, pero no soy un experto. – Gisli